В ходе тестирования модуля рефакторинга в проекте я нашел несколько тестов, которые должны были быть неудачными, но преуспели по какой-то загадочной причине. После удаления ненужную кода и перемещения все в один метод, следующий минимальный пример до сих пор имеет оригинальное поведение: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
никогда не передается, подвергается или экспортируемого любым способом, который доступен в код, работающий в закон часть. Тем не менее, тест проходит, что должно означать, что метод DoSomething
был вызван на SomeProperty
переменной mock
, что, очевидно, неверно.
Как это может произойти?