После нескольких сессий, посвященных уходу за волосами и глубоким размышлениям, я нашел решение своей проблемы.Я отвечаю на свой вопрос только на тот случай, если кто-нибудь еще столкнется с этой проблемой, им не придется проходить через то, что я прошел.
Я заметил, что установка точки останова на методе Save
сделалапроблема более вероятна:
[TestMethod]
public void AllMethodProperlyReturnsAllInstances()
{
// Arrange
Model.PopulateDatabaseConnection(GlobalTestData.TestingDirectory);
List<Universe> universes = new List<Universe>();
universes.Add(new Universe() { Name = "Test1" });
universes.Add(new Universe() { Name = "Test2" });
universes.Add(new Universe() { Name = "Test3" });
// Act
universes.ForEach(x => x.Save()); // <-- Break Point Here
List<Universe> returnUniverses = Universe.All();
// Assert
foreach (Universe universe in universes)
{
if (!returnUniverses.Any(x => x.ID == universe.ID)) { Assert.Fail(); }
}
}
Тогда меня поразило: что, если проблема вызвана не кодом, а самой отладкой?Как я уже говорил, проблема исчезла, когда я не отлаживал, почти как обратный гейзенбаг.Итак, я проверил это.Я запускал модульное тестирование в режиме отладки с точкой прерывания снова и снова в быстрой последовательности, чтобы попытаться воспроизвести проблему.Нет ошибокЗапустил его еще раз, а затем отошел от компьютера.Вернулся, и когда я продолжил сеанс отладки с точки останова, всплыла ошибка.
Затем я запустил модульное тестирование и намеренно ждал в этой точке останова в течение 30 секунд. Он генерировал исключение каждый раз без сбоев.
Так что с моей стороны было предположение, что если код остановлен и у вас открыто соединение, таймер останавливается. Это не так.Таймер истекал во время остановки, а затем, когда я продолжил сеанс, меня уже ожидало исключение. Это было для меня действительно сюрпризом, и я даже не подумал об этом, потому что могне найти ничего в интернете или документации, где говорится, что это ожидаемое поведение.
Надеюсь, это поможет любому, кто столкнется с этой проблемой.