1
重構項目中的單元測試時,我發現一些本應該失敗但由於某種神祕原因而成功的測試。去除不相關的代碼和一切移動到一個方法後,以下最小例仍然具有原始的行爲:AssertWasCalled傳遞未使用的變量
[Test]
public void TestThatShouldFail()
{
// Arrange
var mock = MockRepository.GenerateStub<ISomething>();
mock.Stub(wi => wi.SomeProperty).Return(MockRepository.GenerateStub<ISomeProperty>());
mock.SomeProperty.Stub(t => t.SomethingElse).Return(new SomethingElse());
...
// Act
_foo.Foo();
// Assert
mock.AssertWasCalled(wi => wi.SomeProperty.DoSomething());
}
可變mock
不會傳遞,暴露或以任何方式這是提供給在運行的代碼導出法部分。儘管如此,測試通過了,這應該表示方法在mock
變量的SomeProperty
上被調用,這顯然是錯誤的。
這是怎麼發生的?