12
votes

Comment créer un générique BaseTest avec Nunit que je peux hériter de et avoir des tests de la base de la base?

Si fondamentalement, j'ai un objet de domaine et un référentiel générique pouvant faire des opérations de crud avec cet objet.

[TestFixture(typeof(Foo))]


0 commentaires

3 Réponses :


0
votes

Je n'ai pas essayé votre exemple, mais vous pouvez essayer si vous mettez le test des attributs et testez dans la même classe. Essayez également de le mettre dans la classe de base.


1 commentaires

J'essayais beaucoup de combinaisons de tests de test et de test sur les deux classes, je pense honnêtement que je les ai tous essayés;)



1
votes

Lorsque vous utilisez l'attribut [Testfixture (typeof (FOO))] code> sur la classe de fixation afin de l'utiliser pour différents types; Ce n'est pas censé être abstrait.

Si utilisé sur le FOO Fixture, cette classe doit être générique et non tapé pour FOO. P>

de la DOCS: P>

[TestFixture]
public class AbstractFixtureBase
{
    ...
}

[TestFixture(typeof(string))]
public class DerivedFixture<T> : AbstractFixtureBase
{
    ...
}


2 commentaires

Je vois ton point, merci :) Cela ne résout pas mon problème, car l'abstractfixturebase ne sera pas capable de disposer de la logique de "addwhencallingaddsOsObjectTodatabase ()", me faisant écrire la quasi-implémentation de tous les appareils dérivés .. .


Je signale votre réponse comme le correct. Je suppose que ce n'est pas possible avec Nunit, donc cela me montre en fait comment fonctionne l'API.



2
votes

J'ai eu ce problème récemment et j'ai trouvé une solution de contournement différente. J'ai une interface générique d'IRÉPOSITOIRION que je souhaite pouvoir tester avec plusieurs implémentations, j'ai donc créé une classe de base qui s'ignore pendant la configuration, mais ce comportement est remplacé par ses descendants:

public class InMemoryRepositoryTests : AbstractRepositoryTests
{
    [SetUp]
    public override void SetUp()
    {
        _repository = new InMemoryRepository<string>();
    }
}


1 commentaires

Vous ferez votre vie plus facile si vous créez effectivement Abstractrepositytsts comme une classe abstraite. Ensuite, seules ses implémentations seront instanciées et vous n'aurez pas le problème de la classe de base créant un tas de tests ignorés.