2011-04-19 8 views
5

Soy un poco novato en pruebas unitarias. Tropezado con un problema de la unidad de prueba de una propiedad de carga perezosa y se pregunta si hay una solución simple para que:Manera simple de probar la unidad de una propiedad de carga lenta

private SubscriptionType _subscriptionType; 
public SubscriptionType SubscriptionType 
{ 
    get 
    { 
     if (_subscriptionType == null ||_subscriptionType.SubscriptionTypeId != this.SubscriptionTypeId) 
     { 
      if (this.SubscriptionTypeId !=0) 
       _subscriptionType = SubscriptionType.Load(this.SubscriptionTypeId); 
     } 

     return _subscriptionType; 
    } 
} 

que necesito para poner a prueba la lógica de la propiedad (if) y no la funcionalidad real de carga SubscriptionType - parece Al igual que el enfoque más obvio aquí probablemente sería abstraer SubscriptionType.Load y usar algún tipo de IoC para reemplazar con un método de simulacro. Me pregunto si hay formas más simples de evitar este tipo de refactorización, parece una especie de sobreinnovación solo para escribir un caso de prueba de unidad correcto. ¿Sus pensamientos? Gracias!

+4

Mire la clase Lazy en .NET 4. Usando eso, tendrá menos código - probablemente nada valga la pena probar la unidad –

+1

¿Qué está intentando probar? ¿El hecho de que la propiedad contiene datos correctos o el hecho de que se carga de manera perezosa? – zerkms

+0

Tratando de probar la lógica que invoca Load cuando se cumplen las condiciones y omite la carga de lo contrario – DSY

Respuesta

5

A menos que desee utilizar TypeMock Isolator o Moles, deberá ocultar el método Load detrás de una interfaz e insertar eso en la clase. No hay forma de evitarlo, pero no solo lo hará por el bien de la capacidad de prueba. Por lo general, también tiende a obtener una mejor separación de las preocupaciones de tal refactorización.

Cuestiones relacionadas