使用正确的对象类型调用Rhino Mocks Assert属性Setter

Jon*_*son 6 rhino-mocks

我有一个设置属性的方法

public void SetNetworkCredential(string userName, string password, string domain)
{
    _reportExecutionService.Credentials = new NetworkCredential(userName, password, domain);
}
Run Code Online (Sandbox Code Playgroud)

如何验证是否使用有效的NetworkCredential调用了凭据?

我尝试了这个TestMethod,但它失败了,因为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));
}
Run Code Online (Sandbox Code Playgroud)

有没有办法验证使用NetworkCredential类型的对象并使用正确的参数调用setter?

Jon*_*son 15

我通过使ReportService接受网络凭据而不是用户名,密码,域来修复它

public void SetNetworkCredential(NetworkCredential networkCredential)
{
    _reportExecutionService.Credentials = networkCredential;
}
Run Code Online (Sandbox Code Playgroud)

所以我的测试更容易

[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);
}
Run Code Online (Sandbox Code Playgroud)