2011-07-05 16 views
6

Estoy usando un comportamiento adjunto para agregar funcionalidad de arrastrar y soltar a mi código. Hasta ahora, todo está funcionando bien, pero mi problema es cuando quiero probar mis clases de comportamiento.wpf behavior unit test

Por ejemplo, una de las clases de comportamiento sería algo como lo siguiente:

public class DroppableContainerBehavior: Behavior<FrameworkElement> 
{ 

     protected override void OnAttached() 
     { 
      base.OnAttached(); 

      AssociatedObject.AllowDrop = true; 
      AssociatedObject.Drop += new DragEventHandler(AssociatedObject_Drop); 
      AssociatedObject.DragOver += new DragEventHandler(AssociatedObject_DragOver); 
      AssociatedObject.DragLeave += new DragEventHandler(AssociatedObject_DragLeave); 

     } 


     private void AssociatedObject_Drop(object sender, DragEventArgs e) 
     { 
    ... 
    }   
} 

Mi problema ahora es cuando quiero crear una prueba unitaria para el método AssociatedObject_Drop, necesitaría crear un DragEventArgs objeto, pero esta clase está sellada.

me dio la impresión de que estoy haciendo algo mal .. Mi pregunta es: ¿Debo estar probando mis clases de comportamiento? Los comportamientos están relacionados con la IU, y generalmente no vale la pena probar la IU. Estoy en lo correcto? ¿Tal vez tengo que cambiar el código de mi conducta para que sea más comprobable? ¿algunas ideas?

Gracias por su ayuda!

Respuesta

4

Refactorizaría el código y movería cualquier lógica comercial del AssociatedObject_Drop a sus propias funciones y luego escribiré mis pruebas unitarias para esas funciones.

1
  1. puede crear un objeto, incluso su clase está sellada.

  2. puede probar la gota subida (evento) en su unidad de prueba

  3. también puede probar el método de la lógica AssociatedObject_Drop() mediante la extracción de su código en otra función y escribir la prueba unitaria para esta función.
+0

y ¿sabes cómo podría crear un objeto, incluso su clase está sellada? –

+0

Una clase sellada no se puede heredar pero puede crear una instancia de esta clase. vea http://msdn.microsoft.com/en-us/library/88c54tsw%28v=vs.71%29.aspx – Arseny

+1

um, lamento el problema cuando se hace DragEventArgs() no está sellado. No puedo instanciarlo porque el constructor es interno. –

Cuestiones relacionadas