Ich habe eine kleine Spielzeug-Webanwendung in C# nach dem Vorbild von Connery Asp.net MVC Storefront gemacht.Verwendung der gleichen Testsuite auf verschiedenen Implementierungen einer Repository-Schnittstelle
finde ich, dass ich ein Repository-Schnittstelle haben, rufen Sie es IFooRepository, mit Methoden, sagen
IQueryable<Foo> GetFoo();
void PersistFoo(Foo foo);
Und ich habe drei Implementierungen dieser: ISqlFooRepository, IFileFooRepostory und IMockFooRepository.
Ich habe auch einige Testfälle. Was ich gerne tun würde und noch nicht herausgefunden habe, ist, dass ich die gleichen Testfälle für jede dieser drei Implementierungen ausführen muss und für jeden Testdurchlauf bei jedem Schnittstellentyp ein grünes Häkchen haben muss.
z.B.
[TestMethod]
Public void GetFoo_NotNull_Test()
{
IFooRepository repository = GetRepository();
var results = repository. GetFoo();
Assert.IsNotNull(results);
}
Ich mag diese Testmethode dreimal ausgeführt werden, mit einem gewissen Variation in der Umgebung, die es drei verschiedene Arten von Repository erhalten kann. Zur Zeit habe ich drei ausgeschnittene und eingefügte Testklassen, die sich nur in der Implementierung der privaten Hilfsmethode IFooRepository GetRepository() unterscheiden; Offensichtlich ist das übelriechend.
Allerdings kann ich die Duplizierung nicht einfach durch Konsolidierung der ausgeschnittenen und eingefügten Methoden entfernen, da sie vorhanden sein müssen, öffentlich und als Test für den Test gekennzeichnet sein müssen.
Ich verwende das Microsoft-Testframework und würde es vorziehen, wenn ich kann. Aber auch ein Vorschlag, wie man dies beispielsweise in MBUnit tun könnte, wäre von Interesse.
gute Antwort, aber wenn ich NUnit und RowTest verwendete, würde ich eine Enum im rowtest verwenden, wie in Ricks Antwort. Im Wesentlichen macht er einen RowTest auf die harte Tour. – Anthony
Nun, ich habe meine Antwort vor Rick's gepostet. also habe ich keine Ahnung was er gemacht hat. –