第二种方法是新的
AAA syntax
编辑:
是否确定正在使用该参数调用该方法?如果你使用
service.Stub(r => r.GetUser(Arg<String>.Is.Anything)).Return(new LoginUser());
有没有退货?
如果你设置了一个期望值,而不是简单地将其存根,然后验证期望值,这会给你更多的信息吗?
service.Expect(r => r.GetUser(Arg<String>.Is.Anything)).Return(new LoginUser());
service.VerifyAllExpectations();
编辑2:
好吧,我做了一些测试,看起来这就是你创建存根对象的方式。我假设您使用的方式是旧样式,您需要将此用于新样式:
service = MockRepository.GenerateStub<IMembershipService>();
当我改成这个,我可以运行测试,让他们通过。我不确定使用静态方法生成存根和使用测试之间的确切区别
MockRepository
实例。也许其他人可以解释一下事情的来龙去脉。
总之,为了完整起见,下面是我运行的代码:
[TestFixture]
public class AuthorizationTest
{
private IMembershipService service;
[SetUp]
public void SetUp()
{
service = MockRepository.GenerateStub<IMembershipService>();
service.Stub(r => r.GetUser("dummyName")).Return(new LoginUser());
}
[Test]
public void GetCurrentUser_UserIsAuthenticated_ReturnsCurrentUser()
{
var authStub = new AuthorizationStub_SetCurrentUserAuthenticated(service, true);
LoginUser u = authStub.GetCurrentUser();
Assert.That(u != null);
}
[TearDown]
public void TearDown()
{
service = null;
}
}
public class AuthorizationStub_SetCurrentUserAuthenticated
{
private readonly IMembershipService m_service;
private readonly bool m_b;
public AuthorizationStub_SetCurrentUserAuthenticated (IMembershipService service, bool b)
{
m_service = service;
m_b = b;
}
public LoginUser GetCurrentUser ()
{
return m_service.GetUser ("dummyName");
}
}
public interface IMembershipService
{
bool ChangePassword(string username, string oldPassword, string newPassword);
LoginUser GetUser(string username);
LoginUser GetUser(object providerUserKey);
string ResetPassword(string username);
bool ValidateUser(string username, string password);
}
public class LoginUser
{
}