Ich möchte alle Implementierungen einer Schnittstelle mit der gleichen Testklasse testen. Ich kenne bereits das TestCaseSourceAttribute, also habe ich es eingerichtet, um die Objektinstanzen aus dem statischen testObjects Array zu laden. Dieser Code funktioniert, wie ich will:NUnit: Wie man eine Testklasse für mehrere Objekte ausführt - bessere Alternative als TestCaseSourceAttribute?
[TestFixture]
public class MySerializerTests
{
// IStreamSerializers loaded by the TestCaseSource attribute.
static object[] testObjects = new object[]
{
new BinarySerializer(),
new XmlSerializer(),
new JsonSerializer()
};
[Test, TestCaseSource("testObjects")]
public void Serialize_NullStreamArgument_ThrowsArgumentException(IStreamSerializer serializer)
{
Map map = new Map();
Assert.Throws<ArgumentNullException>(() => serializer.Serialize(null, map));
}
}
However, I have to use *[TestCaseSource("testObjects")]* on every method, which makes it rather tedious for the amount of methods I have. Is there a way of replacing the *TextCaseSource* attribute with an attribute that works on the whole test class? Maybe similar to the way a parameterized *FestFixture* works?
ich etwas ähnliches wie dies möchte, aber wo ich Instanzen meiner getesteten Klassen über den Konstruktor der Testklasse passieren kann:
[TestFixture(0)]
[TestFixture(1)]
[TestFixture(2)]
public class MySerializerTests
{
// IStreamSerializers loaded by the TestCaseSource attribute.
static object[] testObjects = new object[]
{
new BinarySerializer(),
new XmlSerializer(),
new JsonSerializer()
};
int currentIndex;
public MySerializerTests(int index)
{
currentIndex = 0;
}
[Test]
public void Serialize_NullStreamArgument_ThrowsArgumentException()
{
Map map = new Map();
Assert.Throws<ArgumentNullException>(() => testObjects[currentIndex].Serialize(null, map));
}
}
Können Sie erklären, was Sie wollen? Die Instanzen werden in einem statischen Array gespeichert, sodass sie für alle Methoden, die sich auf dieses Array beziehen, freigegeben sind. – Charlie
Ich fügte der Frage eine bessere Erklärung hinzu. Mein erstes Beispiel funktioniert bereits so, wie ich es möchte, aber ich suche nach einer Möglichkeit, das TestCaseSource-Attribut nicht bei jeder Methode verwenden zu müssen. Stattdessen möchte ich elegant alle benötigten Instanzen über eine parametrisierte TestFixture oder eine ähnliche Art erstellen. Es funktioniert perfekt mit Werttypen, aber ich kann keinen Konstruktoraufruf als Parameter übergeben. – Xarbrough