второй метод - новый AAA-синтаксис , и он является предпочтительным методом. Возможно, вы могли бы расширить проблемы, которые у вас были, используя синтаксис AAA, и вы могли бы получить помощь в устранении этой проблемы.
EDIT:
Вы уверены, что метод вызывается с этим параметром? Что произойдет, если вы используете
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();
EDIT2:
Хорошо, я провел небольшое тестирование, и похоже, что именно так вы создаете объект-заглушку. Я предполагаю, что вы используете старый стиль и вам нужно использовать его для нового стиля:
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
{
}