2011-03-30 4 views
7

Estamos usando MSpec para pruebas unitarias después de haber utilizado previamente MbUnit.Cómo generar un mensaje con una aserción de It en MSpec

Estoy acostumbrado a ser capaz de decir

Assert.IsTrue(status, "Status should be true"); 

en MbUnit, es decir, la adición de un mensaje a la afirmación que se genera si se produce un error.

No puedo encontrar ninguna funcionalidad correspondiente en MSpec. Estoy probando que algún XML valida y, si falla, quiero informar el mensaje de error de validación. Así que mi código MSpec parece

string message; 

bool isValid = ValidateXml(myXml, out message); 

isValid.ShouldBeTrue(); 

Pero yo quiero ser capaz de añadir el message a la salida de la prueba si el ShouldBeTrue() falla.

¿Esto es posible?

Respuesta

6

En cuanto a la fuente de MSpec, no. Los métodos de extensión no toman un parámetro de cadena para un mensaje.

Puede agregar trivialmente la funcionalidad usted mismo, en términos de código para escribir; el código está en machine.specifications/Source/Machine.Specifications/ExtensionMethods.cs. No sé lo difícil que es construir.

Por ejemplo, podría crear sobrecargas de ShouldBeFalse y ShouldBeTrue así:

[AssertionMethod] 
public static void ShouldBeFalse([AssertionCondition(AssertionConditionType.IS_FALSE)] this bool condition, string message) 
{ 
    if (condition) 
    throw new SpecificationException(message); 
} 

[AssertionMethod] 
public static void ShouldBeTrue([AssertionCondition(AssertionConditionType.IS_TRUE)] this bool condition, string message) 
{ 
    if (!condition) 
    throw new SpecificationException(message); 
} 
+0

Ah, ya veo. Gracias por eso, he usado ese código para escribir un nuevo método de extensión que arroja una 'SpecificationException' con el mensaje personalizado. Si desea agregar algo sobre eso a su respuesta, lo marcaré como aceptado. –

1

no hay infraestructura para esto en el momento, pero al igual que Matt yo sugeriría implementar sus propios "informes" afirmaciones en la parte superior de MSpec de biblioteca de aserción incorporada (posiblemente en una biblioteca de clases <Product>.ForTesting).

En todos los demás casos, el campo It indica qué debe ser observable, de ahí el parámetro de mensaje faltante.

Cuestiones relacionadas