2012-03-03 27 views
8

Tengo el siguiente ensayo:Pasando único valor a params argumento en NUnit TestCase

[ExpectedException(typeof(ParametersParseException))] 
[TestCase("param1")] 
[TestCase("param1", "param2")] 
[TestCase("param1", "param2", "param3", "optParam4", "optParam5", "some extra parameter")] 
public void Parse_InvalidParametersNumber_ThrowsException(params string[] args) 
{ 
    new ParametersParser(args).Parse(); 
} 

La primera TestCase (obviamente) falla con el siguiente error:

System.ArgumentException : Object of type 'System.String' 
cannot be converted to type 'System.String[]'. 

I tratado de sustituir el TestCase definición con éste:

[TestCase(new[] { param1 })] 

pero ahora me sale el siguiente error de compilación:

error CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

Mi solución por ahora es mover el caso de 'un parámetro' a un método de prueba diferente.

Aún así, ¿hay alguna manera de hacer que esta prueba funcione de la misma manera que las demás?

Respuesta

8

Una forma podría ser utilizar TestCaseSource, y tener un método que devuelve cada conjunto de parámetros, en lugar de utilizar TestCase.

3

Basado en this answer en respuesta a la pregunta 'NUnit cannot recognize a TestCase when it contains an array', el error de compilación se deriva de una bug, y puede superarse usando la sintaxis de los casos de prueba con nombre, como por ejemplo:

[ExpectedException(typeof(ParametersParseException))] 
[TestCase(new[] { "param1"}, TestName="SingleParam")] 
[TestCase(new[] { "param1", "param2"}, TestName="TwoParams")] 
[TestCase(new[] { "param1", "param2", "param3", "optParam4", "optParam5"}, "some extra parameter", TestName="SeveralParams")] 
public void Parse_InvalidParametersNumber_ThrowsException(params string[] args) 
{ 
    new ParametersParser(args).Parse(); 
} 
+0

se vincula a un ReSharper problema, mientras que el problema parece estar en nunit ... en cualquier caso, parece que Resharper resolvió el problema – Noctis

+1

Haciendo esto con 'new [] {...}' donde la matriz es de cadenas da el error CS0182 como se hace referencia por el OP arriba. Los tipos enteros parecen funcionar correctamente. – Brandon

Cuestiones relacionadas