2010-10-15 12 views
7

encontramos con el siguiente ensayo Unidad MS:¿Cuál es la diferencia entre estas dos afirmaciones de prueba unitarias?

[TestMethod] 
public void PersonRepository_AddressCountForSinglePerson_IsNotEqualToZero() 
{ 
    // Arrange. 
    Person person; 

    // Act. 
    person = personRepository.FindSingle(1); 

    // Assert. 
    Assert.AreNotEqual<int>(person.Addresses.Count, 0); 
} 

nunca he visto el uso de genéricos al hacer afirmaciones.

Esta es la forma en que iba a escribir a la aseveración:

// Assert. 
Assert.AreNotEqual(person.Addresses.Count, 0); 

¿Cuál es la diferencia?

Al pasar el control sobre la sobrecarga AreNotEqual() que estoy usando, el método está utilizando la sobrecarga que compara dos dobles (no estoy seguro de por qué no hay una sobrecarga int, int).

Y si yo do pongo el parámetro de tipo genérico <int>, ReSharper dice que es redundante.

Así que mi pregunta es: si la forma en que lo hago sigue siendo segura, ¿por qué usar aserciones genéricas?

Respuesta

5

Así que mi pregunta es - si la forma en que lo hago sigue siendo segura, ¿por qué utilizar las aserciones genéricas?

Usted está utilizando la afirmación genérica ahora. El compilador ve el método genérico y lo elige en tiempo de compilación. Esta es la razón por la cual Resharper dice que el <int> es redundante; no es porque el método sea redundante, sino porque el compilador puede determinar implícitamente que el método Assert.AreNotEqual<int> es el método adecuado para usar.

En general, a menudo no necesita especificar el tipo en genéricos. Esto es lo que hace que la sintaxis de LINQ sea soportable: sin ella, necesitaría especificar los tipos en cada llamada de método en la cadena, y los tipos anónimos no se podrían usar.

Dicho esto, hay ocasiones en que se requiere especificar el tipo genérico. Esto es principalmente si el compilador no puede determinar el tipo automáticamente, por ejemplo, si no hay un parámetro coincidente en la lista de argumentos (es decir, Foo.Create<MyClass>()), o si el tipo no puede determinarse por algún otro motivo.

+1

Eso lo explica muy bien, gracias. Por lo tanto, en general, no necesitamos usar el parámetro de tipo genérico para la mayoría de las aserciones de tipo de valor. Supongo que ahora si el compilador se queja de una afirmación ambigua, sabré usar el parámetro tipo. Gracias. – RPM1984

Cuestiones relacionadas