Привет У меня есть единичный тест, который подключается к событию и обновляет счетчик, основанный на свойстве eventArgs в обработчике, таком как так:Тест модуля MSTest проходит в режиме «отладки», но не выполняется окончательное утверждение в режиме «запуска»
protected void UpdateCounts(object sender, EventArgs eventArgs)
{
lock (lockobject)
{
Counts[eventArgs.Target]++;
}
}
Counts - это статический ресурс словаря, который все юнит-тесты в этом классе разделяют. Я утверждаю, что в конце теста я утверждаю, что счетчик равен 6 для определенного значения Target (Target - это перечисление). Когда я отлаживаю этот тест, он всегда передает это окончательное утверждение, однако, когда я просто запускаю его без каких-либо точек останова, счетчик для этого значения Target может быть 7 или 8, но никогда. 6.
Я понимаю, что многие потоки, пытающиеся получить доступ к записи в словаре, могут представлять условие гонки, поэтому я поместил блокировку вокруг приращения. У меня также есть метод TestInitialize, который проходит перед каждым испытанием запускаемых который выглядит следующим образом:
[TestInitialize]
public void InitTest()
{
foreach (TargetType x in Enum.GetValues(typeof(Target)))
{
Counts[x] = 0;
}
}
Кто-нибудь есть какие-либо представление о том, что здесь происходит?
Итак, у вас есть многократные тесты (именно поэтому вы добавили блокировку) одновременно? Если это так: статический dictionnay сбрасывается при каждом тестировании, и это может вызвать некоторую проблему, поскольку тест может начаться, пока другой все еще находится в инициализации – Daneau
. Я добавил блокировку вокруг приращения, потому что я знал, что в сам одиночный тест многих потоков может потенциально коснуться одного и того же элемента в Словаре одновременно, а не из-за того, что разные тесты могут получить доступ к нему одновременно. Если это была проблема, тогда тест не будет передавать утверждения при запуске в сочетании с другими, но он не может утверждать даже при запуске сам по себе. Он проходит только при запуске в режиме «отладки». –
так что в отладке это работает, но не в релизе? – Daneau