| 

.NET C# Java Javascript Exception

0
Sagen wir ich habe folgenden Test:

[TestMethod]
public void EinTest()
{
IFoo sut = new Foo();

var actual = sut.DoSomething();

Assert.IsNotNull(actual);
}


Nun habe ich für IFoo mehrere Realisierungen. Da ich aber nur das Interface prüfe habe ich keine Lust mir alle Tests zu kopieren, denn dann müsste ich auch bei Änderungen alle Tests nach ziehen.

Deshalb würde ich eigentlich gern ein und den selben Test mehrfach ausführen lassen. Jeweils mit anderen SUTs eben. Geht so etwas? Gibt es bei MS Test ein Attribut oder eine Klasse dafür? Die Ergebnisse müssten natürlich für alle Durchläufe angezeigt werden.
News:
11.05.2011
Hendrik Lösch 1,5k 1 9
2 Antworten
0
NUnit unterstützt dieses Szenario:

[Test, TestCaseSource("GetFooCases")]
public void EinTest(IFoo sut)
{
var actual = sut.DoSomething();
Assert.IsNotNull(actual);
}

public IEnumerable<TestCaseData> GetFooCases()
{
yield return new TestCaseData(null);
yield return new TestCaseData(new Foo());
yield return new TestCaseData(new Foo(new Bar));
}

Ich weiss nicht, ob es was ähnliches unter ms-test gibt, aber vielleicht bringt dich das auf Ideen?!
11.05.2011
Mario Priebe 6,0k 3 9
Geht das auch auf Klassenebene? Sprich, kann ich einem kompletten Testscenario einen Parameter übergeben der dann in allen Testfällen (Methoden) Gültigkeit hat?
Genauer geht es mir in diesem Fall darum das Stratgie-Pattern möglichst einfach abzutesten und da währe es gut wenn für jedes SUT alle Testfälle auch nacheinander ausgeführt würden. Wenn ich es per Methoden-Parameter mache, würden aber für jeden Testall alle SUTs getestet und nicht unbedingt für jedes SUT alle Teställe ausgeführt werden. Sieht im Ergebnis halt etwas "ungünstig" aus.
Hendrik Lösch 11.05.2011
Bin mir jetzt nicht sicher, aber Parameter kann man glaub ich nicht übergeben. Die Fälle müsstest dann in der TestCaseSource-Methode direkt handlen.
Mario Priebe 11.05.2011
Ich mach das immer so:

[TestClass]
public abstract class IFooTest
{
protected IFoo _sut;

[TestMethod]
public void EinTest()
{
IFoo sut = new Foo();

var actual = _sut.DoSomething();

Assert.IsNotNull(actual);
}
}

[TestClass]
public class TestFoo1 : TestIFoo
{
[TestInit]
public void TestInit()
{
_sut = new Foo1();
}
}

[TestClass]
public class TestFoo2 : TestIFoo
{
[TestInit]
public void TestInit()
{
_sut = new Foo2();
}
}
– Gast 16.05.2011
Vererbung von Test-Klassen funktioniert bei MS-Test leider nicht gut. Schreibe ich einen Test in der Basisklasse kann der unter Umständen in der Ableitung nicht korrekt ausgeführt werden. Weiterhin funktioniert die komplette Vererbung nicht über Projektgrenzen hinweg :(
Hendrik Lösch 22.05.2011
0
bei MS Test wird das mit einem DataSource Attribute erledigt
hier ein Blogeintrag dazu

Sorry hab deine Frage falsch verstanden, vergiss meine Antwort. Man sollte nicht so spät im Forum beantworten ;-)
16.05.2011
GerhardK 398 1 7

Stelle deine Unit-testing-Frage jetzt!