Fondamentalmente, se utilizzo MVVM ed esporti ICommand pubblici, i miei delegati dovrebbero essere pubblici o privati?WVF MVVM - Unità Test di un comando - Metodi privati vs pubblici?
risposta
vorrei fare loro riservata - che non fanno parte della classe public interface della tua classe, ecco a cosa servono le proprietà pubbliche di ICommand.
Personalmente, andrei con metodi privati e ti dirò perché. Stai esponendo uno ICommand
, che per me dice che la vista consumante dovrebbe chiamare un CanExecute prima di chiamare un Execute. Se non lo fanno, stanno andando contro l'API e si sparano ai piedi e a quel punto è fuori dalle tue mani. Proprio come se qualcuno avesse usato la reflection per impostare un'importante variabile privata su null e avesse rotto il design della tua classe a causa di questo ... sparandosi ai piedi. Quindi perché rendere privati i membri? Perché non è necessario esporre membri che non dovrebbero essere chiamati direttamente.
Fondamentalmente, quando si unità di prova i membri non farlo singolarmente, lo fa nel modo in cui l'API intende per i membri da eseguire. Quindi, non sei davvero testare i membri, ma soprattutto si sta testando il comando, il che significa ancora una volta dovrebbero essere testati in una coppia in ordine specifico di:
if (CanExecute)
{
Execute;
}
Piuttosto una modifica - o ho appena perso qualcosa ? :) –
@chibacity: A volte tendo a sbraitare. Ho già chiesto qualcosa di simile quando si tratta di test delle unità e qualcuno mi ha detto che se le persone vanno contro l'API, allora è su di loro. Puoi solo andare così lontano a proteggere qualcuno da distruggere una libreria o un'app corretta. –
Ho MVVM per qualcosa di semplice controllo di aumento, diminuzione pulsanti e valore di visualizzazione Slider.
Se si dispone di prova ICommand e INotifyPropertyChanged, è possibile effettuare tipo di 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);
}
}
potete vedere, ho testare il comportamento INotifyPropertyChanged e ICommand esecuzione
- 1. freccetta, unità di test metodi privati
- 2. Metodi privati su metodi pubblici
- 3. Metodi pubblici statici vs metodi pubblici
- 4. Swift - Unità test di variabili e metodi privati
- 5. Quando dovrei usare metodi pubblici/privati / statici?
- 6. Campioni WVF MVVM con database
- 7. WPF MVVM e Test unità
- 8. Metodi dipendenti da test unità
- 9. Test di unità MVVM WPF per ViewModel?
- 10. Prefisso per metodi di prova in Unità: "test" vs "dovrebbe"
- 11. Classe di test Java con molti metodi privati
- 12. troppi metodi pubblici forzati da Test Driven Development
- 13. Slot pubblici e privati in R?
- 14. metodi statici e test di unità
- 15. WVF MVVM Utilizzo di comandi e gestori di eventi
- 16. Test delle unità e ambito degli oggetti: come testare metodi privati / interni ecc.?
- 17. ruby Test :: Unità Opzioni riga di comando?
- 18. Protezione ingresso di metodi privati / protetti?
- 19. Accessors vs membri pubblici
- 20. WVF MVVM: in che modo ViewModels comunica tra loro?
- 21. Quando si dovrebbero usare metodi statici pubblici
- 22. metodi privati in Ruby
- 23. JVM e metodi privati
- 24. F # Metodi statici privati
- 25. Metodi e campi privati
- 26. Test unità di base e test unità
- 27. Silverlight 5 VS 2012 Test unità
- 28. Modifica dei metodi privati protetti per i test
- 29. Junit Best Practice: metodo pubblico che chiama più metodi privati
- 30. MVVM Foundation vs MVVM Toolkit
+1 Verifica l'interfaccia pubblica. –
La mia classe non ha un'interfaccia, è solo una classe. – michael
@michael La collezione di metodi e proprietà 'public' su una classe è considerata" l'interfaccia "della classe, nella misura in cui è così che i consumatori si interfacciano con quella classe. – dlev