2011-05-29 11 views
6

Tengo una clase estática que estoy usando para guardar mis datos de prueba. Cuando hago referencia a esto en mis pruebas de NUnit, todos los cambios que realizo se mantienen en todas las pruebas.NUnit manteniendo los datos estáticos en las pruebas

Por ejemplo, tengo este código en mi prueba:

OrderDto orderDto = SampleData.OrderDto; 
OrderDetailDto orderDetailDto = SampleData.OrderDetailDto; 
orderDto.OrderDetails.Add(orderDetailDto); 

Y muestra de datos es algo como esto:

public static class SampleData { 
    public static OrderDto OrderDto = new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" }; 
} 

La primera vez que lo dirige, orderDto tiene 0 OrderDetails. La segunda vez tiene 1, luego 2, etc. Pensé que entre las pruebas de NUnit, nada persistía. ¿Guarda en caché las propiedades estáticas?

Respuesta

9

Es hasta usted para asegurarse de que los datos no se mantienen en las pruebas unitarias. Cuando se ejecuta, un ensamble de prueba unitaria se comporta como un ensamblaje normal, por lo que cualquier estática que inicie se mantendrá así durante la prueba.

La mayoría de los marcos de prueba de unidades proporcionan una forma de iniciar y limpiar su estado antes y después de la prueba. En NUnit, la forma de hacerlo es tener un método con el atributo [SetUp]. Este método se ejecuta antes de cada prueba.

La manera más fácil de lograr lo que creo que desea lograr es inicializar un campo de miembro en TestSetup y usarlo entre diferentes pruebas. Tenga en cuenta que no usamos un miembro estático aquí, lo que significa que no tenemos que limpiarlo después de la prueba.

[TestFixture] 
public class MyTests { 

    OrderDto OrderDto; 
    OrderDetailDto; 
    [SetUp] 
    public void Setup() { 
    _OrderDto = new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" }; 
    _OrderDetailDto = new OrderDetailDto {/*Sample data*/}; 
    } 

    [Test] 
    public void TestOrderDetailIsAddedToOrder() { 
    orderDto.OrderDetails.Add(_OrderDetailDto); 
    } 
} 
0

Creo que respondí mi propia pregunta con un poco más de manipulación. Aún no sabe por qué se estaba actualizando el objeto, pero si cambio de la clase estática a esto, funciona:

public static class SampleData { 
    public static OrderDto OrderDto { 
     get { return new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" }; } 
    } 
} 
+5

Estaba actualizando el objeto estático porque había una instancia y eso es lo que hicieron sus pruebas. Las pruebas unitarias son como el código normal; si actualizan un campo estático, el campo se actualiza. Ahora está devolviendo una nueva instancia cada vez que se llama a este método, lo que significa que los cambios solo afectan a la instancia actual. – TrueWill

6

pruebas debe ser aislados, pero eso no quiere decir que sean automáticamente.

NUnit ejecutará un método de TestFixture etiquetado con [SetUp] antes de cada prueba y [TearDown] después. Puede usar esto y el otro NUnit attributes para configurar su dispositivo.

Cuestiones relacionadas