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