Ich arbeite in einer Anwendung, die meist Single-Thread, Single-User ist. Es gibt ein paar Worker-Threads hier und dort, und sie verwenden nur Thread-sichere Objekte und Klassen. Die Komponententests testen tatsächlich diejenigen mit mehreren Threads (explizit für die Tests erstellt), und sie testen gut.Gibt es eine Möglichkeit, Komponententests sequenziell mit MSTests auszuführen?
Die Tests der VSTS-Einheit schlagen fehl, wenn Geschäftsobjekte und Subsysteme getestet werden, die nicht Thread-sicher sind. Es ist in Ordnung, wenn sie nicht threadsicher sind, so nutzt die Anwendung sie.
Aber der 'one thread per TestMethod'-Ansatz von MS-Tests tötet uns. Ich musste Objektsperren in vielen Komponententestklassen implementieren, um sicherzustellen, dass die Tests nacheinander ausgeführt werden (ich kümmere mich nicht wirklich um die Reihenfolge, aber ich kann nicht zwei Testmethoden haben, die dasselbe Objekt treffen die selbe Zeit).
Der Code sieht wie folgt aus:
[TestClass]
public class TestSomeObject
{
static object turnStile = new object();
...
[TestMethod]
public void T01_TestThis()
{
lock(turnStile)
{
.. actual test code
}
}
[TestMethod]
public void T02_TestThat()
{
lock(turnStile)
{
-- actual test code
}
}
}
Gibt es eine bessere/elegantere Art und Weise den Testlauf der Reihe nach zu machen?
angeben, so scheint es, dass Sie eine Instanz eines Objekts in allen Ihren Tests wiederverwenden? – BlackTigerX
Ja, im Wesentlichen. Manchmal ist es die Datenbank, manchmal ist es ein Singleton - wie in der Anwendung –
verwendet, da Sie behaupten, dies sei * Unit-Testing * von Ihrem Tag, sollten Sie Ihre Abhängigkeiten mock/stub out, besonders Abhängigkeiten, die nicht Thread-sicher – mxmissile