在这个答案的评论中,声明" 检查对象是否实现了界面 ,尽管可能是猖獗的,但这是件坏事 "
以下是我认为这种做法的一个例子:
public interface IFoo
{
void Bar();
}
public void DoSomething(IEnumerable<object> things)
{
foreach(var o in things)
{
if(o is IFoo)
((IFoo)o).Bar();
}
}
Run Code Online (Sandbox Code Playgroud)
由于我的好奇心激起了以前曾使用过这种模式的变化,我搜索了一个很好的例子或解释为什么它是一件坏事并且无法找到它.
虽然我很可能误解了评论,但有人可以提供一个示例或链接来更好地解释评论吗?
如何验证在我的测试的"act"部分中调用mock,忽略在测试的"Arrange"部分中对mock的任何调用.
[Test]
public void ShouldOpenThrottleWhenDrivingHome()
{
var engineMock = MockRepository.GenerateStub<IEngine>();
var car = new Car(engineMock);
car.DriveToGroceryStore(); // this will call engine.OpenThrottle
car.DriveHome();
engine.AssertWasCalled(e => e.OpenThrottle());
}
Run Code Online (Sandbox Code Playgroud)
我宁愿不尝试注入一个新的模拟或依赖.Repeat(),因为测试然后必须知道在设置中调用该方法的次数.