Creare una classe di test di base che contiene i test condivisi tra le implementazioni IFoo come questo:
// note the absence of the TestFixture attribute
public abstract class TestIFooBase
{
protected IFoo Foo { get; set; }
[SetUp]
public abstract void SetUp();
// all shared tests below
[Test]
public void ItWorks()
{
Assert.IsTrue(Foo.ItWorks());
}
}
Creare ora una piccola classe derivata per ogni implementazione che si desidera verificare:
[TestFixture]
public class TestBarAsIFoo : TestIFooBase
{
public override void SetUp()
{
this.Foo = new Bar();
}
}
modifica: Apparentemente NUnit ha anche il supporto per parameterized test fixtures, anche i test generici con tipi di parametri sono supportati. Esempio dalla documentazione collegata:
[TestFixture(typeof(ArrayList))]
[TestFixture(typeof(List<int>))]
public class IList_Tests<TList> where TList : IList, new()
{
private IList list;
[SetUp]
public void CreateList()
{
this.list = new TList();
}
[Test]
public void CanAddToList()
{
list.Add(1); list.Add(2); list.Add(3);
Assert.AreEqual(3, list.Count);
}
}
Questo esempio è un po 'semplicistico, perché ha il vincolo new()
per i tipi. Ma potresti anche usare Activator.CreateInstance
e passare gli argomenti del costruttore per le tue implementazioni IFoo
dagli attributi TestFixture
.
fonte
2009-09-30 00:52:20
grandi soluzioni. Non avrei mai pensato di ereditare i test unitari. E mai realizzato nUnit avrebbe anche verificato i metodi della classe base. – Chris