Pregunta La interfaz de prueba tiene sentido?


Soy nuevo en TDD, pero no estoy seguro de por qué debería probar una interfaz.

¿Tiene sentido el siguiente código?

public interface IInterface
{
    int Value { get; }
}


[TestMethod]
public void Test_iinterface_value()
{
    var iinterface = mockery.NewMock<IInterface>();
    Expect.Once.On(iinterface).GetProperty("Value").Will(Return.Value(10));
    Assert.AreEqual(iinterface.Value, 10, "Doh!");
}

5
2018-05-05 05:49


origen


Respuestas:


A menos que me equivoque, parece que estás creando un objeto simulado que devuelve un valor dado cuando se lo solicitan. Y luego pides el valor y lo obtienes (sorpresa). Yo diría que no tiene sentido escribir tales pruebas, a menos que esté probando el marco de burla en sí mismo o espere que el compilador juegue algunos trucos sucios con usted.


8
2018-05-05 05:55



Esto se conoce como el anti-patrón Mockery TDD.

Sin embargo, es posible que desee escribir un conjunto de pruebas que se aplique a todos los implementadores de una interfaz determinada para garantizar que los contratos se implementen correctamente. Como un ejemplo, esto es lo Grensesnitt hace.


3
2018-05-05 06:30



La prueba de su interfaz resulta principalmente en una prueba de integración, probando de manera efectiva toda su pila. La lógica de la aplicación procesa la entrada en la interfaz de usuario y, mediante la respuesta de la interfaz de usuario, puede ver "la imagen completa", es decir, su aplicación funciona como se esperaba.

En la mayoría de los casos, la IU se compone de clases estándar proporcionadas por el marco con modificaciones menores, por lo que, a menos que tenga dudas sobre las capacidades de su marco de UI, o esté desarrollando uno por sí mismo, no hay necesidad real de pruebas unitarias en las clases de UI.

Si no utiliza clases de IU muy personalizadas, las pruebas unitarias no deberían ser necesarias por otro motivo: no debería haber lógica de aplicación en las clases de IU.


0
2018-05-05 05:54



La idea detrás de crear un simulacro para una interfaz es probar otro objeto (el "objeto bajo prueba"), que necesita este simulacro para ser creado o inicializado correctamente. Crear un simulacro solo para probar el simulacro en sí mismo En mi humilde opinión parece pasar por alto el punto de prueba unitaria.

Sin embargo, puedo pensar en un caso en el que escribir una prueba para una interfaz quizás tenga sentido. Si está escribiendo pruebas unitarias no solo para fines de prueba, sino también para tener una sinopsis de cómo usar algo, entonces tal "prueba para una interfaz" puede demostrar cómo usar IInterface. Por supuesto, eso es más razonable cuando tiene una interfaz más complicada donde su uso no es tan obvio.


0
2018-05-05 06:11



Probar interfaces no tiene sentido. La prueba de un objeto simulado tampoco tiene sentido, a menos que use el objeto simulado para probar un método implementado de una clase abstracta (resumen en la definición de c #).


0
2018-05-05 08:00