considerar:¿Cómo escribir una prueba unitaria para "T debe ser un tipo de referencia"?
class MyClass<T> where T : class
{
}
En ese caso, la cláusula where está haciendo cumplir una especificación que MyClass sólo es un genérico de un tipo de referencia.
Idealmente, debería tener una prueba de unidad que pruebe esta especificación. Sin embargo, esta prueba unitaria, obviamente, no va a funcionar, pero explica lo que estoy tratando de lograr:
[Test]
[DoesNotCompile()]
public void T_must_be_a_reference_type()
{
var test = new MyClass<int>();
}
¿Qué puedo hacer yo para probar una especificación que ha implementado al no permitir que el código para compilar?
EDITAR:
Más información: Ok, así que mi razonamiento para hacer esto (jaja) es que he estado siguiendo una metodología TDD, en la que no se puede escribir cualquier código a menos que tenga una prueba de falla de la unidad. Digamos que usted ha tenido este:
class MyClass<T> { }
¿Qué prueba se puede escribir que fallarían a menos T eran una clase? Algo como default(T) == null
?
hacer otras modificaciones:
Así que después de un "análisis de la causa raíz" en esto, el problema es que me baso en default(T)
siendo null
en un consumidor de esta clase, de manera implícita. Pude refactorizar ese código de consumidor en otra clase y especificar allí una restricción de tipo genérico (restringiéndolo a class
) que efectivamente hace que ese código no se compile si alguien elimina la restricción en la clase de la que estoy hablando anteriormente.
¿Por qué no está probando que la clase se llama 'MyClass'? – SLaks
@SLaks: técnicamente var test = new MyClass(); lo probaría, ¿no? –
Creo que @SLaks estaba usando el sarcasmo para demostrar que no es necesario probar el compilador ... ese es el trabajo de Microsoft. – TheCloudlessSky