2012-07-25 13 views
15

Tengo una situación en la que necesito omitir la prueba de corriente del cuerpo del método de prueba. La forma más simple es escribir algo como esto en el método de prueba.Prueba unitaria de Microsoft. ¿Es posible omitir la prueba del cuerpo del método de prueba?

if (something) return; 

Pero tengo un montón pruebas complicadas y necesito una manera de saltarse la prueba de métodos que invoco en el cuerpo del método de prueba actual. ¿Es posible?

+1

Mi respuesta totalmente instintiva es preguntar ¿por qué? =) Y siempre puede hacer un 'Assert.Pass();' o 'Assert.Fail();'. Pero de lo contrario ... las pruebas están ahí para ser ejecutadas. =) –

+0

¿Por qué omitir la prueba? ¿No debería devolver Assert.Fail() o Assert.Inconclusive()? – glosrob

+5

Sugeriría 'Assert.Inconclusive' sobre' Assert.Fail', ya que no es un caso de falla explícita. 'Inconclusive' aclara que * no sabe * si la prueba tuvo éxito o falló. –

Respuesta

28

En relación con otras respuestas (y como se sugiere): me gustaría sugerir el uso de más de Assert.InconclusiveAssert.Fail, ya que la situación de su creador original no es un caso explícito fracaso.

Como resultado, el uso de Inconclusive deja en claro que usted no sabe si la prueba tuvo éxito o falló, lo cual es una distinción importante. ¡No demostrar el éxito no siempre constituye una falla!

34

No debe saltear la prueba de esta manera. Mejor hacer una de las cosas siguientes: Ensayo de

  • marca como ignorado por medio [Ignore] atributo
  • tiro NotImplementedException de su prueba
  • escritura Assert.Fail() (si no se puede olvidar a completar esta prueba)
  • eliminar esta prueba

También tenga en cuenta que sus pruebas no deben contener una lógica condicional. En su lugar, debe crear dos pruebas: prueba por separado para cada ruta de código (con nombre, que describe qué condiciones está probando). Así, en lugar de escribir:

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

Escribir dos pruebas:

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

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

puede pasar por alto una prueba y se deja totalmente sin tocar en el código.

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

} 
+3

Creo que quiere decir programáticamente decidir esto desde dentro de la prueba, similar al Assume de NUnit. – Rup

+1

Sólo por el bien de la concisión: [TestMethod, Ignore] – BernardV

Cuestiones relacionadas