이것은 내가 테스트하고 싶은 방법입니다.
void Update(User user)
{
if (_userQuery.IsNameExist(user.Guid, (int) user.UserId, user.Name))
UpdateUser(user);
}
Update_Test()
위에서 테스트해야하는 메소드가 있는 테스트 클래스 아래 .
[TestFixture]
class ModifyuserServiceTest
{
private IModifyUserService ModifyUserService { get; set; }
private Mock<IUserQuery> UserQuery { get; set; }
private Mock<IUserRepository> UserRepository { get; set; }
[SetUp]
public void SetUp()
{
userQuery = new Mock<IUserQuery>();
UserRepository = new Mock<IUserRepository>();
ModifyUserService = new ModifyUserService(userQuery.Object, UserRepository.Object);
}
[Test]
public void Update_Test()
{
userQuery.Setup(uow => uow.IsNameExist(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<string>()))
.Returns(true);
ModifyuserService.Update(new User());
UserRepository.Verify(uow => uow.Add(It.IsAny<User>()), Times.Once);
}
}
어떤 이유로 든 오류가 발생합니다.
System.InvalidOperationException : Nullable object must have a value.
테스트 메서드를 디버그하면 테스트 된 메서드에서이 줄에 오류가 발생합니다.
if (_userQuery.IsNameExist(user.Guid, (int) user.UserId, user.Name))
인수 값을 살펴보면 다음 0, null, null
과 같은 내용이 있습니다. 내가 지정한 테스트 방법에서와 같이 재미있을 것 같습니다 userQuery.Setup
.
It.IsAny<int>(), It.IsAny<int>(), It.IsAny<string>()
나는 다음과 같이 시도했다.
userQuery.Setup(uow => uow.IsNameExist(999, 33, "whatever"))
그럼에도 불구하고 동일한 오류가 발생하고 값이 다음과 같이 표시됩니다. 0, null, null
여기서 무엇이 잘못 되었습니까?
최신 정보:
public bool IsNameExist(int guid, int userId, string name)
{
Parameters = new List<IDbDataParameter>
{
Context.CreateParameter("@Guid", guid, DbType.Int64),
Context.CreateParameter("@userId", userId, DbType.Int64),
Context.CreateParameter("@Name", name, DbType.String)
};
var count = (int)Context.GetScalarValue($"SELECT count(*) FROM {UserTable} WHERE userId=@userId And Guid=@Guid And Name=@Name", CommandType.Text,
Parameters.ToArray(), null);
return count > 0;
}
방금 테스트를 실행했습니다
int? x = null;
int y = (int)x; //System.InvalidOperationException: 'Nullable object must have a value.'
테스트에서 동일한 오류 메시지로 실패합니다.
이것은 MOQ 설정과 관련이 없습니다.
테스트중인 메소드가로 캐스트 null
를 시도하고 int
있어 런타임 오류가 발생합니다.
이는 UserId
테스트중인 메서드에 전달 된 값이 null 임을 의미합니다 .
테스트를 완료 할 수 있도록 사용자 ID 값을 설정해야합니다.
//...
var user = new User() {
UserId = 0
};
ModifyuserService.Update(user);
//...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다