Aquí podría ser tu PUBLICIDAD


Prueba de unidad WPF, UIElement.RaiseEvent, ArgumentException

votos
1

Estoy intentando construir una prueba unitaria y me gustaría falsificar un evento DropEvent.

Me sale un error ya que está tratando de plantear el evento. No puedo crear un DragEventArgs si su nivel de protección es interno.

System.ArgumentException : Object of type 'System.Windows.RoutedEventArgs' cannot be converted to type 'System.Windows.DragEventArgs'

Tengo lo siguiente ...

        [Test]
    public void Test()
    {
        DesignerMock view = new DesignerMock();
        _viewModel = (PanelDesignViewModel)view.DataContext;
        view.Show();

        Assert.IsNotNull(_viewModel);

        RoutedEventArgs args = new RoutedEventArgs(DesignerCanvas.DropEvent,view.DesignerCanvas) ;
        view.DesignerCanvas.RaiseEvent(args);

        view.Close();

    }
Publicado el 12/03/2009 a las 21:56
fuente por usuario jeff
En otros idiomas...        العربية       

2 respuestas

votos
1

Como dice ascalonx, no debes probar tu vista, solo tu ViewModel. Esto significa que su ViewModel necesita estar desacoplado de la Vista. En lugar de un controlador de eventos, exponga un método público simple en ViewModel que hará el trabajo que necesita y simplemente llámelo en su prueba. Para que su vista llame a este método, use un comportamiento adjunto. Caliburn tiene un buen comportamiento adjunto de "Acciones" para hacer justamente esto.

Usted menciona que también tiene algunas cosas de VisualTreeHelper "pasando". Esto es una violación del patrón MV-VM, ya que acopla su VM a una implementación de V específica. Lo que sea que haga allí, resúmalo en una interfaz de "servicio" y use IoC o Service Locator para proporcionar este servicio a su máquina virtual. Podría sugerir que mire a Onyx por esto (descargo de responsabilidad: soy el autor de esta biblioteca). Proporciona un mecanismo flexible y fácil de usar para proporcionar servicios a su máquina virtual.

Respondida el 23/03/2009 a las 09:21
fuente por usuario wekempf


Aquí podría ser tu PUBLICIDAD


votos
0

Si insistes en que quieres probar tu código de esta manera, puedes usar reflexiones para crear un DragEventArgs. Sin embargo, la verdadera pregunta, creo, es si estás yendo en la dirección correcta con tu unidad de prueba. Por lo general, evito realizar pruebas directamente en mis vistas y me limito a probar los modelos de vista más fáciles de probar (si de hecho estás usando MVVM) debido exactamente al problema que estás teniendo ahora.

Respondida el 12/03/2009 a las 10:31
fuente por usuario dustyburwell