Я думаю, что 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
, по крайней мере, так показали мои тесты , Я провел тесты несколько раз, и я всегда получаю это.
Это ошибка? Или ожидаемое поведение?
Если я скопирую приведенный выше код в консольную программу и запускаю, я ясно вижу эффект многопоточности.
Я использую тест с использованием Runner TestDriven.net.