2009-07-30 10 views
6

Tengo un método que establece una propiedadburla de Rhino Assert propiedad del organismo fue llamado con el objeto correcto tipo

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

¿Cómo verifico que las credenciales se llamó con un NetworkCredential válida?

yo probamos este TestMethod pero falla debido a que los objetos son diferentes referencias NetworkCredential

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

¿Hay una manera de validar que el colocador fue llamado con un objeto de tipo NetworkCredential y con los parámetros correctos?

Respuesta

15

me fijo al hacer ReportService aceptar una Credencial de red en lugar del nombre de usuario, contraseña, dominio

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

así que mi prueba fue mucho más fácil

[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

Excelente respuesta, por lo que este código realmente funciona, prueba si se llamó a setter con un valor dado: mock.AssertWasCalled (x => x.PropertyName = VALUE_WE_ARE_CHECKING); – Roboblob

3

Editar: Repensando este problema, mi respuesta sugerida anterior probablemente no funcionaría. He aquí por qué:

Básicamente, está intentando verificar que la dependencia de una dependencia se haya configurado correctamente. Esa es probablemente la razón por la que tiene problemas para escribir una prueba unitaria para esto. Probablemente desee considerar si tendría sentido mover el método SetNetworkCredential en la clase que implementa IReportExecutionService en su lugar.

Y si lo hace, la unidad de prueba para ese método sería bastante simple:

[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

que sería ideal para el seguro. Pero la clase que implementa IReportExecutionService es una clase generada por código (WSDL a SSRS), extraje el IReportExecutionService para poder simularlo. –

Cuestiones relacionadas