2009-07-30 15 views
6

Rhino Mocks Assert Özellik Belirleyici doğru nesne türü ile çağrıldı

public void SetNetworkCredential(string userName, string password, string domain) 
{ 
    _reportExecutionService.Credentials = new NetworkCredential(userName, password, domain); 
} 

bir özelliği ayarlayan bir yöntem var Kimlik bilgilerinin geçerli bir NetworkCredential ile çağrıldığını nasıl doğrularım?

Bu TestMethod'ü denedim, ancak NetworkCredential nesneleri farklı referanslar olduğundan başarısız oluyor.

[TestMethod] 
public void TestTest() 
{ 
    const string userName = "userName"; 
    const string password = "password"; 
    const string domain = "domain"; 

    var mock = MockRepository.GenerateMock<IReportExecutionService>(); 
    var rptService= new ReportService(mock); 

    rptService.SetNetworkCredential(userName, password, domain); 

    mock.AssertWasCalled(x => x.Credentials = new System.Net.NetworkCredential(userName, password, domain)); 
} 

Belirleyiciye NetworkCredential türünde bir nesne ve doğru parametrelerle çağrılmanın bir yolu var mı?

cevap

15

Ben ReportService yerine adınızı, şifre Ağ Kimlik Bilgilerini kabul yaparak düzelttim, alan

public void SetNetworkCredential(NetworkCredential networkCredential) 
{ 
    _reportExecutionService.Credentials = networkCredential; 
} 

yüzden benim test

emin için ideal olacaktır
[TestMethod] 
public void TestTest() 
{ 
    const string userName = "userName"; 
    const string password = "password"; 
    const string domain = "domain"; 

    var mock = MockRepository.GenerateMock<IReportExecutionService>(); 
    var rptService= new ReportService(mock); 

    var networkCredential = new System.Net.NetworkCredential(userName, password, domain); 

    rptService.SetNetworkCredential(networkCredential); 

    mock.AssertWasCalled(x => x.Credentials = networkCredential); 
} 
+0

Mükemmel bir yanıt, bu kod aslında, belirtilen değerle setör çağrıldığında test eder: mock.AssertWasCalled (x => x.PropertyName = VALUE_WE_ARE_CHECKING); – Roboblob

3

Düzeltme: Bu sorunu yeniden düşünmek, önceki önerilen yanıtım muhtemelen işe yaramaz. Nedeni:

Temel olarak, bağımlılığın bağımlılığının doğru ayarlandığını doğrulamaya çalışıyorsunuz. Muhtemelen bunun için bir birim testi yazmakta sorun yaşamanız muhtemeldir. Muhtemelen, SetNetworkCredential yöntemini bunun yerine IReportExecutionService uygulayan sınıfa taşımanın mantıklı olup olmayacağını düşünmek isteyebilirsiniz.

Ve bunu yaparsanız, o yöntemi birim test yeterince basit olacaktır:

[Test] 
public void TestSetNetworkCredential() 
{ 
    const string userName = "userName"; 
    const string password = "password"; 
    const string domain = "domain"; 

    var rptService= new ReportExecutionService(); 

    rptService.SetNetworkCredential(userName, password, domain); 
    Assert.AreEqual(userName, rptService.Credentials.UserName); 
    Assert.AreEqual(password, rptService.Credentials.Password); 
    Assert.AreEqual(domain, rptService.Credentials.Domain); 
} 
+0

çok daha kolaydı. Ancak, IReportExecutionService'yi uygulayan sınıf, kod oluşturulmuş bir sınıftır (WSDL'den SSRS'ye), ben bununla alay edebilmem için IReportExecutionService'i ayıkladım. –

İlgili konular