下面这两种给方法一些假实现的方法之间的主要区别是什么?
我在一个测试中使用第二种方式很好,但在另一个测试中,除非我使用第一种方式,否则无法实现行为。
所以(第一个),
using (test.Record()) //test is MockRepository instance
{
service.GetUser("dummyName");
LastCall.Return(new LoginUser());
}
vs(第二个)。
service.Stub(r => r.GetUser("dummyName")).Return(new LoginUser());
编辑
问题是第二种技术在测试中返回 null,而我希望它返回一个新的 LoginUser。第一种技术通过返回一个新的 LoginUser 来按预期运行。在这两种情况下使用的所有其他测试代码都是相同的。
[TestFixture]
public class AuthorizationTest
{
private MockRepository test;
private IMembershipService service;
[SetUp]
public void SetUp()
{
test = new MockRepository();
service = test.Stub<IMembershipService>();
using (test.Record())
{
service.GetUser("dummyName");
LastCall.Return(new LoginUser());
}
//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;
test = null;
}
}
可能与界面中的过载有关吗?
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);
}
在被测方法中导致问题的行是:
LoginUser currentUser = _repository.GetUser(identity.Name);
在调试模式下,identity.Name 永远不会为空,并且始终是“dummyName”