我在定义将这两个类加倍进行哪种类型的测试时遇到了麻烦。
它们都包含(基本)行为。
他们的区别是,第一个在真实上下文中不会运行,而第二个将运行(基本上是什么都不做的类,但是它会起作用!第二个会崩溃)。
在我看来,它们都像Test Spies。它们都提供了一种获取是否调用Run()
方法的方法。 (这就是这些类存在的原因!)。
我不能在所有上下文中都使用第二个,因为我也不能在所有上下文中仅使用第一个。
我可以将它们都重构为一个,但是也许在阅读代码时会使事情变得不太清楚。
class FilterTestSpy : IFilter {
private bool hasBeenRan = false;
...
public bool HasBeenRan { get { return hasBeenRan; } }
public void Run() {
hasBeenRan = true;
}
}
class FilterTestSpy2: IFilter {
private bool hasBeenRan = false;
...
public bool HasBeenRan { get { return hasBeenRan; } }
public void Run() {
...some logic...
hasBeenRan = true;
}
}
我知道这里有嘲笑框架,这不是我要问的。
谢谢!
最佳答案
您可以在Run()
方法中创建要委派的策略吗?这样一来,您将只能拥有一个间谍类,并且只需承担一个责任,即告诉该方法是否被调用。因此,对于不同的上下文,您可以注入不同的策略。