为什么这种测试方法不起作用?我不断得到要求返回值或抛出异常。
public AuthenticateResponse Authenticate(string username, string password)
{
string response = GetResponse(GetUrl(username, password).ToString());
return ParseResponse(response);
}
[TestMethod()]
[ExpectedException(typeof(XmlException))]
public void Authenticate_BadXml_ReturnException()
{
MockRepository mockRepository = new MockRepository();
SSO sso = mockRepository.Stub<SSO>();
sso.Stub(t => t.GetResponse("")).Return("<test>d");
AuthenticateResponse response = sso.Authenticate("test", "test");
}
答案 0 :(得分:3)
您的存储库仍处于“记录”模式。您将记录/重放语义(“旧的”处理方式)与较新的AAA(编号/动作/断言)样式混合在一起。
不要创建自己的存储库,只需使用:
var sso = MockRepository.GeneateStub<SSO>();
现在一切都应该正常工作。
答案 1 :(得分:1)
您的最后一行是调用存根对象上的Authenticate
方法,在调用它时没有设置返回值或异常值,因此Rhino Mocks不知道存根应该做什么它会导致错误。你可能不想在你的存根上调用一个方法 - 这对我来说似乎没有意义,是否有另一个对象(你在这个测试中实际测试过)你应该调用一个方法?
答案 2 :(得分:0)
那是你的全部考试吗?如果是这样,你的测试毫无意义。您测试中唯一的对象是您正在存根的对象 - 测试的主题在哪里?
如果您正在尝试测试SSO类,那么绝对不会想要模拟/存根它。如果SSO具有一个或多个依赖项,请使用模拟框架来设置这些依赖项与您的SUT之间的固定交互。这就是模拟框架的确切目的。