web-dev-qa-db-fra.com

Tests unitaires Microsoft. Est-il possible de sauter le test du corps de la méthode de test?

J'ai donc une situation où j'ai besoin de sauter le test actuel du corps de la méthode de test. Le moyen le plus simple est d'écrire quelque chose comme ça dans la méthode de test.

if (something) return;

Mais j'ai beaucoup de tests compliqués et j'ai besoin d'un moyen de sauter le test des méthodes que j'invoque dans le corps actuel de la méthode de test. C'est possible?

33
DrunkCoder

Suite à d'autres réponses (et comme suggéré): je suggère d'utiliser Assert.Inconclusive plus de Assert.Fail, car la situation de l'affiche originale n'est pas un cas d'échec explicite.

L'utilisation de Inconclusive comme résultat indique clairement que vous ne savez pas si le test a réussi ou échoué - ce qui est une distinction importante. Ne pas prouver le succès ne constitue pas toujours un échec!

42
Dan Puzey

Vous ne devez pas ignorer le test de cette façon. Mieux vaut faire l'une des choses suivantes:

  • marquer le test comme ignoré via l'attribut [Ignore]
  • lancer NotImplementedException de votre test
  • écrire Assert.Fail() (sinon vous pouvez oublier de terminer ce test)
  • supprimer ce test

Gardez également à l'esprit que vos tests ne doivent pas contenir de logique conditionnelle. Au lieu de cela, vous devez créer deux tests - un test distinct pour chaque chemin de code (avec un nom, qui décrit les conditions que vous testez). Donc, au lieu d'écrire:

[TestMethod]
public void TestFooBar()
{
   // Assert foo
   if (!bar)
      return;
   // Assert bar
}

Écrivez deux tests:

[TestMethod]
public void TestFoo()
{
   // set bar == false
   // Assert foo
}

[Ignore] // you can ignore this test
[TestMethod]
public void TestBar()
{
   // set bar == true
   // Assert bar
}
64
Sergey Berezovskiy

Vous pouvez ignorer un test et le laisser complètement intact dans le code.

[TestMethod()]
[Ignore()]    //ignores the test below
public void SomeTestCodeTest()
{
   //test code here

}
12
kmandew