![](/img/trans.png)
[英]NUnit throws System.InvalidOperationException: “All test threads are blocked.”
[英]Nunit System.InvalidOperationException
這是我想測試的方法:
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
指定的測試方法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
為空。
您需要為用戶 ID 設置一個值,以便可以執行測試直至完成。
//...
var user = new User() {
UserId = 0
};
ModifyuserService.Update(user);
//...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.