Básicamente, si utilizo MVVM y expongo ICommands públicos, ¿deberían mis delegados ser públicos o privados?WPF MVVM - Unidad de prueba de un comando - Privado vs métodos públicos?
Respuesta
Me gustaría que sean privadas - que no son parte de su clase public interface, para eso son las propiedades públicas de ICommand.
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;
}
Muy a una edición - o qué acabo de perder algo ? :) –
@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. –
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
- 1. Unidad de prueba de código privado
- 2. Métodos estáticos públicos vs métodos públicos
- 3. ¿Métodos de ayuda de prueba de unidad?
- 4. unidad prueba un comportamiento adjunto wpf
- 5. Prueba de Unidad Pregunta de Organizador Privado (C#)
- 6. Prueba de unidad Enlaces de WPF
- 7. Prefijo para los métodos de prueba en la Unidad: "prueba" vs "debería"
- 8. ¿Implementando su propio MVVM vs. usando un marco MVVM?
- 9. métodos públicos en clases privadas de paquete
- 10. WPF: Vinculando un ContextMenu a un comando MVVM
- 11. Comando en MVVM (WPF): cómo devolver un valor?
- 12. Código de prueba de unidad que llama a métodos estáticos
- 13. ¿Cuándo debería usar métodos públicos/privados/estáticos?
- 14. Ejemplo de diálogo WPF MVVM
- 15. prueba Unidad de métodos muy triviales (sí o no)
- 16. WPF MVVM Dudas
- 17. Prueba de la unidad de WPF GUI marco
- 18. Cómo probar campos privados que se modifican mediante métodos públicos
- 19. Uso del patrón de diseño de la Unidad de trabajo/Sesiones NHibernate en un MVVM WPF
- 20. Atajos de teclado en WPF MVVM?
- 21. Prueba de unidad Clases estáticas
- 22. Prueba de Unidad de Curado
- 23. Cómo ocultar los métodos públicos de IntelliSense
- 24. Simplificar el comando RelayCommand/Delegate en WPF MVVM ViewModels
- 25. Implementación WPF ICommand MVVM
- 26. MVVM Foundation vs MVVM Toolkit
- 27. VS Team Test: Métodos de inicialización de prueba múltiple en la clase de prueba
- 28. Unidad de prueba de una clase que utiliza un temporizador
- 29. ¿Puedo depurar mientras ejecuto una prueba de unidad VS?
- 30. (Unidad) Prueba de ArrayAdapter
+1 Prueba la interfaz pública. –
Mi clase no tiene una interfaz, es solo una clase. – michael
@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