Что я делаю не так на этот раз с Moq? - PullRequest
0 голосов
/ 28 июня 2009

У меня снова проблемы с moq, и я не уверен, что сделал на этот раз неправильно.

Итак, я пошагово прохожу отладчик и замечаю, хотя в моём макете я установил

ResetPassword для возврата "эй, похоже, не

Вот часть моего модульного теста:

var membershipMock = new Mock<MembershipProvider>();



           var user = new Mock<MembershipUser>();

           user.SetupGet(x => x.Email).Returns("Email");
           user.Setup(x => x.ResetPassword("test")).Returns("hey");

           membershipMock.Setup(m => m.GetUser("chobo2", false)).Returns(user.Object);



           authentication.Authenticate.Provider = membershipMock.Object;

           // Act

           var actual = authentication.PasswordRecoveryStep2("chobo2","2z");

Мой код

  MembershipUser userName = Provider.GetUser(user, false);

                string newPassword = userName.ResetPassword(securityAnswer);

 Mail.To = userName.Email;

Провайдер - это свойство, которое устанавливается с помощью объекта макета, как вы видите. Часть электронной почты заполнена в порядке. Просто ResetPassword не возвращает то, что должен. Это просто дает мне ноль.

Спасибо

1 Ответ

7 голосов
/ 28 июня 2009

Если «2z» - ваш безопасный ответ, Moq не вернет «hey», так как он настроен на возврат «hey» только для строковых входов, которые соответствуют «test».Следующее работает отлично для меня:

public class AuthenticationHelper {
    readonly MembershipProvider _provider;

    public AuthenticationHelper(MembershipProvider provider) {
        _provider = provider;
    }

    public string PasswordRecoveryStep2(string userName, string recoveryAnswer) {
        MembershipUser user = _provider.GetUser(userName, false);
        string newPassword = user.ResetPassword(recoveryAnswer);
        return newPassword;
    }
}

, который проходит следующий тест ...

[TestFixture]
public class AuthHelperTests {
    Mock<MembershipProvider> memberShipProvider;
    Mock<MembershipUser> user;

    [SetUp]
    public void Init() {
        memberShipProvider = new Mock<MembershipProvider>();
        user = new Mock<MembershipUser>();
        user.SetupGet(u => u.Email)
            .Returns("test@test.com");
        user.Setup(u => u.ResetPassword("secret"))
            .Returns("test2");
        memberShipProvider
            .Setup(prov => prov.GetUser("test", false))
            .Returns(user.Object);
    }

    [Test]
    public void WillResetPasswordByCallingProvider() {
        var helper = new AuthenticationHelper(memberShipProvider.Object);
        string newPassword = helper.PasswordRecoveryStep2("test", "secret");
        Assert.AreEqual("test2", newPassword);
        memberShipProvider.Verify(p => p.GetUser("test", false));
        user.Verify(u => u.ResetPassword("secret"));
    }
}
...