79 votes

Quand dois-je utiliser le TestFixtureSetUp attribut au lieu d'un constructeur par défaut?

Le NUnit documentation ne me dites pas quand utiliser une méthode avec un TestFixtureSetup et quand à faire l'installation dans le constructeur.

public class MyTest
{
    private MyClass myClass;

    public MyTest()
    {
        myClass = new MyClass();
    }

    [TestFixtureSetUp]
    public void Init()
    {
        myClass = new MyClass();
    }
}

Existe-il des bonnes/mauvaises pratiques à propos de l' TestFixtureSetup versus constructeur par défaut ou n'est-il pas une différence?

65voto

Sam Wessel Points 4906

Pourquoi auriez-vous besoin d'utiliser un constructeur dans votre classes de test?

J'utilise [SetUp] et [TearDown] marqué méthodes pour l'exécution d'un code avant et après chaque test, et, de même, [TestFixtureSetUp] et [TestFixtureTearDown] marqué méthodes pour l'exécution d'un code qu'une seule fois avant et après tous les test de l'appareil ont été exécutés.

Je suppose que vous pourriez probablement remplacer le [TestFixtureSetUp] pour un constructeur (bien que je n'ai pas essayé), mais cela ne semble pause de la convention claire qui l'a marqué méthodes fournissent.

21voto

casademora Points 15214

Je pense que cela a été l'une des questions qui n'a pas été abordé par le nUnit de l'équipe. Cependant, il y a l'excellente xUnit projet qui a vu exacte de ce problème et a décidé que les constructeurs ont été une bonne chose pour une utilisation sur banc d'essai de l'initialisation.

Pour nunit, ma meilleure pratique dans ce cas est d'utiliser le TestFixtureSetUp, TestFixtureTearDown, SetUp, et TearDown méthodes décrites dans la documentation.

Je pense que ça m'aide quand je ne pense pas que d'un montage de test nUnit comme une classe normale, même si vous définissez avec qui construire. Je pense à eux comme des accessoires fixes, et qui me met sur le mental d'obstacle et me permet de négliger cette question.

13voto

Ergwun Points 5293

Une chose que vous ne pouvez pas faire avec [TestFixtureSetup] que vous pouvez faire dans le constructeur est de recevoir des paramètres de l' [TestFixture] .

Si vous souhaitez paramétrer votre banc d'essai, alors vous devez utiliser le constructeur pour au moins certains de la mise en place. Jusqu'à présent, je n'ai utilisé ce pour les tests d'intégration, par exemple pour l'essai d'une couche d'accès aux données avec plusieurs fournisseurs de données:

[TestFixture("System.Data.SqlClient",
  "Server=(local)\\SQLEXPRESS;Initial Catalog=MyTestDatabase;Integrated Security=True;Pooling=False"))]
[TestFixture("System.Data.SQLite", "Data Source=MyTestDatabase.s3db")])]
internal class MyDataAccessLayerIntegrationTests
{
    MyDataAccessLayerIntegrationTests(
        string dataProvider,
        string connectionString)
    {
        ...
    }
}

11voto

Oleg Deribas Points 84

Il existe une différence entre le constructeur et la méthode annotée [TestFixtureSetUp] d'attribut. Selon NUnit documentation:

Il est recommandé que le constructeur n'a pas d'effets secondaires, depuis NUnit peut construire l'objet à plusieurs reprises au cours d'une session.

Donc, si vous avez aucun coût d'initialisation, il est préférable d'utiliser TestFixtureSetUp.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X