2011-07-28 8 views

Respuesta

11

Me gustaría que sean privadas - que no son parte de su clase public interface, para eso son las propiedades públicas de ICommand.

+0

+1 Prueba la interfaz pública. –

+0

Mi clase no tiene una interfaz, es solo una clase. – michael

+3

@michael La colección de métodos y propiedades "públicas" en una clase se considera la "interfaz" de esa clase, en la medida en que los consumidores interactúan con esa clase. – dlev

4

Personalmente, me gustaría ir con métodos privados y le diré por qué. Está exponiendo un ICommand, que me dice que la vista de consumo debería llamar a CanExecute antes de llamar a Execute. Si no lo hacen, irán contra la API y se dispararán a sí mismos en el pie y en ese punto está fuera de sus manos. Al igual que si alguien usara la reflexión para establecer una variable privada importante como nula y rompiera el diseño de su clase debido a esto ... disparándose en el pie. Entonces, ¿por qué hacer que los miembros sean privados? Porque no hay necesidad de exponer a los miembros que no deberían ser llamados directamente.


Básicamente, cuando los miembros unidad de prueba que no lo hacen de forma individual, lo hace en la forma en la API tiene la intención de los miembros a ser ejecutados. Por lo tanto, usted no está realmente a prueba los miembros, pero por otra parte se está probando el comando, que a su vez significa que se deben probar en un par en el orden específico de:

if (CanExecute) 
{ 
    Execute; 
} 
+0

Muy a una edición - o qué acabo de perder algo ? :) –

+0

@chibacity: A veces tiendo a despotricar. He preguntado algo similar antes cuando se trata de pruebas unitarias y alguien me dijo que si las personas van en contra de la API, entonces eso depende de ellos. Solo puedes ir tan lejos para proteger a alguien de destruir una biblioteca o aplicación adecuada. –

2

Tengo MVVM para controlar algo más simplemente los botones de aumento, disminución y el valor de presentación del control deslizante.

Si tiene ICommand prueba y INotifyPropertyChanged, puede hacer que tipo de unittest:

[TestMethod] 
public void TestViewModel3() 
{ 
    int min = -10; 
    int max = 10000; 
    int initVal = 50; 
    bool initState = false; 

    ToglledSliderModel model = new ToglledSliderModel(initState, initVal, min, max); 
    ToglledSliderViewModel viewModel = new ToglledSliderViewModel(); 
    viewModel.Model = model; 

    int status = 567; 
    viewModel.PropertyChanged += delegate 
    { 
     status = 234; 
    }; 

    for (int i = 1; i < 100; i++) 
    { 
     status = 567; 
     ICommand ic = viewModel.IncreaseValue; 
     ic.Execute(this); 
     Thread.Sleep(2); 
     Assert.AreEqual(status, 234); 
     Assert.AreEqual(model.SliderValue, initVal + i); 
    } 
} 

se puede ver, pongo a prueba el comportamiento INotifyPropertyChanged y ICommand ejecutar

Cuestiones relacionadas