犀牛模拟期待

5

为什么我的测试中下面的响应总是为空?

SSO.cs

 public class SSO : ISSO
    {
        const string SSO_URL = "http://localhost";
        const string SSO_PROFILE_URL = "http://localhost";

        public AuthenticateResponse Authenticate(string userName, string password)
        {
            return GetResponse(SSO_URL);
        }

        public void GetProfile(string key)
        {
            throw new NotImplementedException();
        }

        public virtual AuthenticateResponse GetResponse(string url)
        {
            return new AuthenticateResponse();
        }
    }

    public class AuthenticateResponse
    {
        public bool Expired { get; set; }
    }

SSOTest.cs

 [TestMethod()]
public void Authenticate_Expired_ReturnTrue()
{
    var target = MockRepository.GenerateStub<SSO>();
    AuthenticateResponse authResponse = new AuthenticateResponse() { Expired = true };

    target.Expect(t => t.GetResponse("")).Return(authResponse);
    target.Replay();

    var response = target.Authenticate("mflynn", "password");


    Assert.IsTrue(response.Expired);
}

2
如果你仍在使用记录/回放,请参阅三个简单的Rhino Mocks规则 - TrueWill
1个回答

7
你的期望是不正确的。你定义了期望在GetResponse的参数中接收一个空字符串,但你实际传递了SSO_URL的值。因此,期望没有被满足,返回了null。
有两种选项可以纠正这个问题:
一种方法是在期望上设置IgnoreArguments()。
另一种方法是将GetResponse的参数更改为期望的空字符串。
target.Expect(t => t.GetResponse("")).IgnoreArguments().Return(authResponse);

另一种方法是将您的SSO_URL作为参数传递给GetResponse方法,如下所示:

target.Expect(t => t.GetResponse("http://localhost")).Return(authResponse);

没错,我没有考虑到那个。 - Mike Flynn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接