Я работаю с командой, у которой были проблемы со случайными неудачными тестами.Неудачные тесты, по-видимому, только провалились на сервере сборки (TFS).Но, когда я исследовал проблему, я смог заставить их также выйти из строя на моей локальной машине.
Кажется, я решил проблему, но мне нужно подтверждение моей теории о неудачных тестах.
Один из тестов, который не прошел, имел этот метод TestInitialize:
[TestInitialize]
public void TestInit()
{
Mock<ILog> loqMock = new Mock<ILog>();
Depend.RegisterInstance(loqMock.Object);
}
Класс Depend является статической оболочкой вокруг контейнера Unity.Внутри него есть локальная ссылка на контейнер Unity.Некоторые тесты в этом приборе сбои кажутся случайными.
Моя теория состоит в том, что переменная logMock разыменовывается, поскольку нет ссылки ни на этот класс, ни на класс Depend после возврата из метода Initialize.
Я «исправил» проблему, изменив код следующим образом:
private Mock<ILog> loqMock;
[TestInitialize]
public void TestInit()
{
loqMock = new Mock<ILog>();
Depend.RegisterInstance(loqMock.Object);
}
Теперь на переменную logMock ссылаются до тех пор, пока существует тестовое исправление.Я не могу заставить его потерпеть неудачу, как я мог бы с другой установкой.
PS: я знаю, что это использование контейнера IOC - действительно плохая идея и что это должно быть изменено, но проект яконсультирование, у меня нет ресурсов для внесения изменений, и я ничего не могу с этим поделать.