我如何moq这个DotNetOpenAuth Response对象?

时间:2009-05-04 14:17:41

标签: moq dotnetopenauth

我有一个接受DotNetOpenAuth(正式名称为DotNetOpenId)Response对象的方法。我的方法提取任何声称的数据,检查我的系统中是否存在该用户,yadda yadda yadda ...并且当完成时返回auth'd用户实例。

现在..如何使用 moq 模拟此响应对象,以测试我的身份验证方法(AuthenticateUser())?

switch (response.Status)
{
    case AuthenticationStatus.Authenticated:

    User user = null;
    try
    {
        // Extract the claimed information and 
        // check if this user is valid, etc.
        // Any errors with be thrown as Authentication Errors.
        user = _authenticationService.AuthenticateUser(response) as User;
    }
    catch (AuthenticationException exception)
    {
        ViewData.ModelState.AddModelError("AuthenticationError", exception);
    }

    .. other code, like forms auth, other response.status' etc. ..
}

模拟框架:moq
语言:.NET C#3.5 sp1
响应对象:取自DotNetOpenAuth框架

1 个答案:

答案 0 :(得分:2)

我特别不熟悉Moq,但响应对象是一种实现DotNetOpenAuth.OpenId.RelyingParty.IAuthenticationResponse的类型,因此可以通过创建实现相同接口的类并且准备返回相同的接口来轻松模拟它各种价值观。

...刚刚下载了Moq并模拟了IAuthenticationResponse,如下所示:

var response = new Mock<IAuthenticationResponse>(MockBehavior.Loose);
response.SetupGet(r => r.ClaimedIdentifier)
        .Returns("http://blog.nerdbank.net/");
response.SetupGet(r => r.Status)
        .Returns(AuthenticationStatus.Authenticated);
response.SetupGet(r => r.FriendlyIdentifierForDisplay)
        .Returns("blog.nerdbank.net");

IAuthenticationResponse resp = response.Object;
Console.WriteLine(resp.ClaimedIdentifier);

显然,不是将结果发送到Console.WriteLine,而是希望将resp对象传递给您正在测试的方法。