Estoy probando constructores cuando contienen lógica, p. validación o configuración condicional un estado privado. Los errores de validación terminan en una excepción lanzada desde el constructor. La ejecución exitosa termina en una creación de objeto que exhibe un comportamiento específico dependiendo del estado que se estableció en el constructor. De cualquier manera, requiere pruebas. Pero las pruebas de constructor son aburridas porque todas tienen el mismo aspecto: invocan al constructor y hacen una afirmación. Las declaraciones de métodos de prueba a menudo ocupan más espacio que toda la lógica de prueba ... Así que escribí una biblioteca de pruebas simple que ayuda a escribir pruebas declarativas para los constructores: How to Easily Test Validation Logic in Constructors in C#
He aquí un ejemplo en el que estoy probando siete casos de prueba en un constructor de una clase:
[TestMethod]
public void Constructor_FullTest()
{
IDrawingContext context = new Mock<IDrawingContext>().Object;
ConstructorTests<Frame>
.For(typeof(int), typeof(int), typeof(IDrawingContext))
.Fail(new object[] { -3, 5, context }, typeof(ArgumentException), "Negative length")
.Fail(new object[] { 0, 5, context }, typeof(ArgumentException), "Zero length")
.Fail(new object[] { 5, -3, context }, typeof(ArgumentException), "Negative width")
.Fail(new object[] { 5, 0, context }, typeof(ArgumentException), "Zero width")
.Fail(new object[] { 5, 5, null }, typeof(ArgumentNullException), "Null drawing context")
.Succeed(new object[] { 1, 1, context }, "Small positive length and width")
.Succeed(new object[] { 3, 4, context }, "Larger positive length and width")
.Assert();
}
de esta manera, puede probar todos los casos relevantes para mi constructor sin tener que escribir mucho.
Si su constructor tiene, por ejemplo, un if (condición), necesita para probar ambos flujos (verdadero, falso). Si su constructor hace algún tipo de trabajo antes de la configuración. Debe verificar que el trabajo esté hecho. – graffic
¿Qué sucede si tienes un 'checkArgumnt' en el constructor (quizás para probar que el objeto es nulo o no)? ¿Vale la pena probar eso? – noMAD
Sí, a menudo vale la pena probar constructores con su propio comportamiento complejo. – yfeldblum