私は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は()私は期待()の実装は、そのために十分であると考えていstubUser
を返すことを決めた、より深い内部コールを必要とするので、内部GETUSER()、 を呼び出します。 次のコール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);
}
- それは呼び出すことはありませんモック以外のものユニットテストコードを確認し、テストしようとしている実装も表示してください。 –
boolで明示的に呼び出すCheckPassword passWordMatch = userMangerMock.CheckPassword(userInfo.Id、userInfo.Password); CheckPassword()の実装を更新しました。 – Srikanth
userManagerMock.CheckPassword()がmockオブジェクトのメソッドを呼び出しています。その時点で実際のコードは呼び出されていません。 – Pedro