2009-07-30 5 views
6

Ich habe eine Methode, die eine Eigenschaft setztRhino Mocks Assert Property Setter wurde mit der richtigen Objekttyp namens

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

wie kann ich überprüfen, dass die Anmeldeinformationen mit einer gültigen NetworkCredential genannt wurde?

habe ich versucht, dieses Testmethod aber es funktioniert nicht, weil die NetworkCredential Objekte unterschiedliche Referenzen

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

Gibt es eine Möglichkeit zu überprüfen, dass der Setter mit einem Objekt vom Typ NetworkCredential und mit den richtigen Parametern aufgerufen wurde?

Antwort

15

ich es behoben, indem das Report ein Netzwerk Credential akzeptieren anstelle des Benutzername, Passwort, Domain

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

so war mein Test viel einfacher

[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

Ausgezeichnete Antwort, so dass dieser Code tatsächlich funktioniert es testet, wenn Setter mit gegebenem Wert aufgerufen wurde: mock.AssertWasCalled (x => x.PropertyName = VALUE_WE_ARE_CHECKING); – Roboblob

3

Bearbeiten: Umdenken dieses Problem, meine vorherige vorgeschlagene Antwort würde wahrscheinlich nicht funktionieren. Hier ist der Grund:

Im Wesentlichen versuchen Sie zu überprüfen, dass die Abhängigkeit einer Abhängigkeit korrekt eingerichtet wurde. Wahrscheinlich haben Sie deshalb Probleme, einen Komponententest zu schreiben. Sie möchten wahrscheinlich überlegen, ob es sinnvoll wäre, die Methode SetNetworkCredential in die Klasse zu verschieben, die stattdessen IReportExecutionService implementiert.

Und wenn Sie das tun, die Unit-Test für diese Methode wäre einfach genug sein:

[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

das sicher wäre ideal. Aber die Klasse, die IReportExecutionService implementiert, ist eine Code-generierte Klasse (WSDL zu SSRS). Ich habe den IReportExecutionService extrahiert, so dass ich mich darüber lustig machen konnte. –