Я пишу тест для CheckPassWord()
Я предполагаю, что вызов Expect не ведет себя так, как ожидалось, на моем userMangerMock.Ожидать вызова не работает на mock
//CheckPassword returns true if the parameter matches to the exsting user.
//Existing user is obtained by GetUser() by internal call
bool passWordMatch = userMangerMock.CheckPassword(userInfo.Id, userInfo.Password);
CheckPassWord() внутренне вызывает GetUser(), С GetUser() нуждается в более глубокие внутренние вызовы, я решил возвращать stubUser
Я считаю, что реализация Ожидать() достаточно для этого. Обратите внимание, что следующий звонок var userInfo = userMangerMock.GetUser("TestManager");
возвращает stubUser
. Но, CheckPassword()
звонок Я принимаю, что stubUser
не возвращается, поэтому тест не работает.
Исправьте меня, если есть ошибка в следующем UT.
//Use TestInitialize to run code before running each test
[TestInitialize()]
public void MyTestInitialize()
{
CreateUser();
}
private static IUser _stubUser;
public void CreateUser()
{
IUserFactory iUserFactory = new UserFactory();
UserParams parameters = new UserParams();
parameters.Password = "TestPassword123!";
parameters.UserID = "TestManager";
_stubUser = iUserFactory.CreateUser(parameters);
}
/// <summary>
///A test for CheckPassword
///</summary>
[TestMethod()]
public void CheckPasswordTest()
{
// !!! Below I've used WhenCalled() to show you that correct
// expectation is called based on argument type, just see in debugger
IUserManager userMangerMock = MockRepository.GenerateMock<IUserManager>();
userMangerMock.Expect(x => x.GetUser(Arg<string>.Is.Anything))
.WhenCalled((mi) =>
{
Debug.WriteLine("IUserManager - string parameter");
})
.Return(_stubUser);
var userInfo = userMangerMock.GetUser("TestManager");
bool passWordMatch = userMangerMock.CheckPassword(userInfo.Id, userInfo.Password);
userMangerMock.VerifyAllExpectations();
Assert.AreEqual(true, passWordMatch);
}
/// <summary>
/// Returns true if password matches the user
/// </summary>
public bool CheckPassword(string userId, string password)
{
if (userId == null)
{
throw new ArgumentNullException("userId");
}
IUser user = GetUser(userId);
if (user == null)
{
throw new UserManagementException(UserManagementError.InvalidUserId);
}
return (user.Password == password);
}
кодекса Вы разместили не выглядят как настоящее модульное тестирование - это никогда не называют ничего, кроме насмешек. Пожалуйста, проверьте код тестирования устройства, а также продемонстрируйте, какую реализацию вы пытаетесь протестировать. –
Его явное указание CheckPassword на bool passWordMatch = userMangerMock.CheckPassword (userInfo.Id, userInfo.Password); Я обновил реализацию CheckPassword(). – Srikanth
userManagerMock.CheckPassword() вызывает метод на макет-объекте. Вы не вызываете никакого реального кода в этот момент. – Pedro