코드가 스레딩 될 때 nunit이 제대로 작동하지 않는 것 같아요 :스레딩이 Nunit에서 제대로 작동하지 않습니까?
여기 샘플 코드가 있습니다 :
public class multiply
{
public Thread myThread;
public int Counter
{
get;
private set;
}
public string name
{
get;
private set;
}
private Object thisLock = new Object();
public void RunConsolePrint()
{
//lock(thisLock)
//{
Console.WriteLine("Now thread " + name + " has started");
for (int i = 1; i<= Counter; i++)
{
Console.WriteLine(name + ": count has reached " + i+ ": total count is "+Counter);
}
Console.WriteLine("Thread " + name + " has finished");
//}
}
public multiply(string pname, int pCounter)
{
name = pname;
Counter = pCounter;
myThread = new Thread(new ThreadStart(RunConsolePrint));
}
}
그리고 여기 테스트 코드가 있습니다 :
[Test]
public void Main()
{
counter=100;
multiply m2=new multiply("Second", counter);
multiply m1 = new multiply("First", counter);
m1.myThread.Start();
m2.myThread.Start();
}
그리고 출력은 다음과 같습니다. m1
와 m2
의 순차적 인 실행은 m1
의 루프가 임을 의미합니다. 항상이 m2
보다 먼저 실행됩니다. 이는 적어도 테스트 결과입니다. 나는 몇 번 시험을 치렀다. 나는 항상 이것을 얻는다.
이것은 버그입니까? 아니면 예상되는 행동인가?
위의 코드를 콘솔 프로그램에 복사하여 실행하면 스레딩 효과를 명확하게 볼 수 있습니다.
TestDriven.net 러너를 사용하여 테스트를 사용하고 있습니다.
위의 테스트를 몇 번 실행하면 일관된 결과가 나타납니다. m2가 항상 m2보다 앞에 먼저 실행됩니다. – Graviton
그렇다고 버그가 있음을 의미하지는 않습니다. 그것은 단지 스케줄링의 단점 일 수 있습니다. 작업을 더 길게 만들어보십시오. –