CheckPassWord()
에 대한 테스트를 작성하고 있습니다. 내 userMangerMock에서 Expect 통화가 예상대로 작동하지 않는다고 가정합니다.예상 전화가 모의 작업을하지 않습니다
//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);
}
코드 - 그것은 결코 호출하지 mock을 제외한 모든 것. 단위 테스트 코드를 확인하고 테스트하려는 구현을 보여주십시오. –
bool에서 명확하게 호출하는 CheckPassword passWordMatch = userMangerMock.CheckPassword (userInfo.Id, userInfo.Password); CheckPassword() 구현을 업데이트했습니다. – Srikanth
userManagerMock.CheckPassword()가 mock 객체에서 메소드를 호출 중입니다. 이 시점에서 실제 코드를 호출하지 않습니다. – Pedro