ClassInitialize attribut dans l'unité de test en fonction de la classe ne l'appelle pas
J'ai ajouté de la méthode dans un TestBase classe :
[ClassInitialize]
public static void InitializBeforeAllTests()
{
}
Mais quand je le lance dans le Débogage d'une unité de test Test1()
:
[TestClass]
public class TestMapping : TestBase
{
[TestMethod]
public void Test1()
{
}
La TestBase.InitializBeforeAllTests()
méthode n'est jamais appelé.
Pourquoi?
- On dirait que vous a répondu sur la site de Microsoft
- Malheureusement, ce lien est rompu.
- Utiliser le constructeur statique sur la classe de base. Question similaire à celui-ci: stackoverflow.com/questions/15944504/...
Vous devez vous connecter pour publier un commentaire.
Lors de la déclaration de ClassInitialize attribut sur une méthode, la méthode doit être statique, public void et devrait prendre un seul paramètre de type TestContext.
Si vous rencontrez également d'autres méthodes AssemblyInitialize attribut sur la même unité de test, le test sera exécuté, mais va sauter sur toutes les méthodes de test et vous allez directement à AssemblyCleanup ou tout simplement cesser de fumer.
Essayez l'exemple sur ClassInitialize attribut dans MSDN.
pour quelque raison que ce soit, le toolkit unit test framework UnitTestExecuter permet uniquement d'un ClassInitialize et un ClassCleanup méthode définie par la classe de test... à la différence de TestInitialize et TestCleanup méthodes, qui appelait à la fois la dérivée et la base de la classe de test...
Vous pouvez l'installation d'une assemblée de la méthode initialize dans votre classe de base. Pas tout à fait la même que ClassInitialize, mais c'est une option viable. Source:La Solution mentionnée ici.
Vous pouvez également ajouter une méthode de Nettoyage:
Le MME lien ne fonctionne plus.
De toute façon, une façon de contourner ce problème est de simplement déplacer votre code d'initialisation dans le constructeur de la classe de base. Cela permettra d'assurer qu'il est appelé à partir de n'importe quel descendant de classes à chaque fois qu'ils sont instanciés.
TestMethod
. Si le Ctor sera appelée avant chaque test (commeTestInitialize
) qui n'est pas ce que l'OP veut.Dans mon cas, j'ai eu l'
[Ignore]
attribut appliqué (le test est exécuté manuellement)Cela a provoqué
[AssemblyInitialize]
de ne jamais être appeléSi j'ai enlevé le
[Ignore]
attribut[AssemblyInitialize]
a été appelé comme prévu.Curieusement,
[AssemblyCleanup]
est toujours appelée avec ou sans le[Ignore]
de mon test