【发布时间】:2021-10-09 04:56:06
【问题描述】:
我是 Moq 的新手。
如何断言泛型类型?
测试的这一行出现类型错误
Assert.True(ServiceResponse<string>.Equals(result));
有错误
无法在静态上下文中访问非静态方法“Equal”
完整代码如下
控制器
private readonly IAuthRepository _authRepo;
public AuthController(IAuthRepository authRepo)
{
_authRepo = authRepo;
}
[HttpPost("Register")]
public async Task<ActionResult<ServiceResponse<int>>> Register(AddUserDtos user)
{
var response = await _authRepo.Register(user);
if (!response.Success)
{
return BadRequest(response);
}
return Ok(response);
}
服务响应
public class ServiceResponse<T>
{
public T Data { get; set; }
public bool Success { get; set; } = true;
public string Message { get; set; } = null;
}
测试
public class UnitTest1
{
public Mock<IAuthRepository> repositoryStub = new Mock<IAuthRepository>();
[Fact]
public async Task UnitOfWork_StateUnderTest_ExpectedBehaviour()
{
// Arrange
repositoryStub.Setup(repo =>
repo.Register(It.IsAny<AddUserDtos>()))
.ReturnsAsync((ServiceResponse<string>) null);
var controller = new AuthController(repositoryStub.Object);
AddUserDtos newUser = new AddUserDtosModel()
{Company = "Test", Email = "email", FirstName = "", LastName = "", Password = "344343", Phone = "test"};
// Act
var result = await controller.Register(newUser);
// Assert
Assert.True(ServiceResponse<string>.Equals(result));
}
}
【问题讨论】:
-
首先尝试创建一个您期望收到的 ServiceResponse 实例,然后检查收到的结果。
ServiceResponse<int> response = new ServiceResponse<int>() { // fill in the properties that you want to check }; Assert.True(response.Equals(result));