코뿔소 모의로 배경 작업자를 테스트합니다
-
06-07-2019 - |
문제
백그라운드 스레드에서 DB 쿼리를 수행하는 클래스에 백그라운드 작업자가 있다고 가정 해 봅시다.
이 수업을 테스트하고 싶어요
그래서 나는 내 DB를 조롱하고 지금까지 컬렉션을 다시 반환합니다. 배경 작업자가 Do Work라고 불렀고 마무리가 발생했는지 확인하십시오.
테스트가 무작위로 실패한다는 것을 알았습니다 (스레드와 관련이 있다고 생각합니다)
모든 제안
해결책
배경 스레드와 어서/확인 사이에 레이스 조건이있을 수 있습니다.
예를 들어:
[Test]
public void TestWithRaceCondition()
{
bool called = false;
new Thread(() => called = true).Start();
Assert.IsTrue(called);
}
스레드는 반드시 어설 션 전에 끝나는 것은 아니며 때로는 그렇지 않으며 때로는 그렇지 않습니다. 이 경우에 대한 해결책은 배경 스레드에 합류하는 것입니다.
[Test]
public void TestWithoutRaceCondition()
{
bool called = false;
var thread = new Thread(() => called = true);
thread.Start();
thread.Join()
Assert.IsTrue(called);
}
레이스 조건인지 확인하는 한 가지 방법은 테스트 스레드를 지연시키는 것입니다 (테스트 직전에 오랫동안 수면 스레드를 호출하십시오). 테스트가 실패하는 경우 레이스 조건에 대한 좋은 표시입니다.
제휴하지 않습니다 StackOverflow