2011-07-28 23 views

cevap

11

- onlar Sınıfınızın public interface'un parçası değildir, genel ICommand özellikleri bunun için geçerlidir.

+0

+1 Genel arabirimi sınayın. –

+0

Sınıfımın bir arayüzü yok, ancak bir sınıf. – michael

+3

@michael Bir sınıfta "kamu" yöntemlerinin ve özelliklerinin toplanması, tüketicilerin bu sınıfla nasıl etkileştiği gibi, sınıfın "arabirimi" olarak kabul edilir. – dlev

4

Şahsen, özel yöntemlerle giderdim ve nedenini anlatacağım. ICommand'u açığa çıkarıyorsunuz, bu da tüketen görünümün bir Execute çağırmadan önce bir CanExecute çağırması gerektiğini söylüyor. Eğer yapmazlarsa, API'ye karşı çıkıyorlar ve kendilerini ayağa çekiyorlar ve o noktada elleriniz tükeniyor. Tıpkı birilerinin önemli bir özel değişkeni belirlemek için yansıma kullandığını sanki sınıf tasarımını bozup ... ... kendilerini ayağa fırlatmak gibi. Öyleyse üyeleri neden özel kılıyor? Çünkü doğrudan çağrılmaması gereken üyeleri ortaya çıkarmaya gerek yok. Eğer birim bunu bireysel olarak yapmayın üyelerini test ederken


Temelde, üyelerin yürütülecek API niyetinde şekilde yaparlar. Yani gerçekten üyelerini test etmezsiniz, ama dahası tekrar onlar belirli bir düzen içinde bir çift test edilmelidir demektir komutu, test ediyoruz: Onları özel kılacak

if (CanExecute) 
{ 
    Execute; 
} 
+0

Oldukça düzenlemeyi yürütülmesi INotifyPropertyChanged davranış ve iCommand sınamak - ya da sadece bir şey mi kaçırdım ? :) –

+0

@chibacity: Bazen rant yapmaya eğilimliyim. Daha önce benzer bir şeyden önce ünite testine geldiğimi sormuştum ve birisi bana eğer insanlar API'ye karşı geliyorlarsa, o zaman onlar üzerinde olduğunu söyledi. Birinin uygun bir kütüphane veya uygulamayı imha etmesini engellemek için bu kadar ileri gidebilirsiniz. –

2

Artış, azaltma düğmeleri ve Slider show değerinin basit kontrolü için MVVM kullanıyorum. Test iCommand ve INotifyPropertyChanged varsa

, sen UnitTest tür yapabilirsiniz: Gördüğünüz

[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); 
    } 
} 

i