| 

.NET C# Java Javascript Exception

4
Welche Best Practices gibt es um Code in mehreren Threads zu testen?

Wenn ich mit NUnit ganz naiv einen Thread starte und in diesem ein Assert.Fail mache, wird der Test trotzdem mit "grün" quittiert.

Bei mir im Speziellen geht es darum parallele Nutzertransaktionen zu simulieren.
17.06.2012
kleffel 614 8
1 Antwort
1
folgender Workaround ist zwar nicht schön, funktioniert aber:

- Hauptthread führt Aktionen für Nutzer 1 aus
- Kindthread wird als anonymer Delegat in der Test-Methode implementiert
- Kindthread führt Aktion für Nutzer 2 aus
- Exceptions von Kindthread werden manuell abgefangen
- Hauptthread wartet mit Therad.Sleep manuell auf das Beenden des Kindthreads

[Test]
public void Function1And2CanBeUsedConcurrently()
{
SomeClass obj = new SomeClass();

obj.Function1Executed += (s, e) =>
{
// Nutzer2 simulieren, wenn Nutzer 1 bestimmte Aktion macht oder irgend ein Zustand erreicht ist
new Thread(() =>
{
try
{
// irgend eine Funktion hier jetzt ausführen
function2Done = true;
}
catch (Exception exc)
{
System.Console.WriteLine(exc);
throw; // NUnit ignoriert Exceptions in Background-Threads, deshalb auf die Console schreiben
}
finally
{
bgThreadFinished = true;
}
}).Start();

Thread.Sleep(1000); //

};

obj.DoFunction1();

while (!bgThreadFinished)
{
Thread.Sleep(250);
}

Assert.That(function2Done);
}
17.06.2012
kleffel 614 8

Stelle deine .net-Frage jetzt!