C# 在.NET Core NUnit上的单元测试失败
我正在尝试为登录控制器设置测试,但每次运行测试时都会失败。我得到下面的错误。应_Login()中的var结果始终为空 信息: 应为:不为空 但是是:空C# 在.NET Core NUnit上的单元测试失败,c#,multithreading,unit-testing,.net-core,nunit,C#,Multithreading,Unit Testing,.net Core,Nunit,我正在尝试为登录控制器设置测试,但每次运行测试时都会失败。我得到下面的错误。应_Login()中的var结果始终为空 信息: 应为:不为空 但是是:空 Stack Trace: UserTests.should_Login() line 47 GenericAdapter`1.GetResult() AsyncToSyncAdapter.Await(Func`1 invoke) TestMethodCommand.RunTestMethod(TestExecutionCo
Stack Trace:
UserTests.should_Login() line 47
GenericAdapter`1.GetResult()
AsyncToSyncAdapter.Await(Func`1 invoke)
TestMethodCommand.RunTestMethod(TestExecutionContext context)
TestMethodCommand.Execute(TestExecutionContext context)
<>c__DisplayClass1_0.<Execute>b__0()
BeforeAndAfterTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
//UserTests
public class UserTests
{
Mock<IUserService> UserServiceMock = new Mock<IUserService>();
private UserController UserController;
[SetUp]
public void Setup()
{
UserServiceMock.Setup(x => x.Authenticate(new UserRequest { Email = "antony@gmail.com", Password = "Password1" }))
.ReturnsAsync(new ApiResponse(HttpStatusCode.OK)
{
ResponseObject = new
{
User = new
{
Id = 1,
Name = "Test",
Email = "test@gmail.com",
Token = "TokenGen"
}
}
});
}
[Test]
public async Task should_Login()
{
UserController = new UserController(UserServiceMock.Object);
var result = await UserController.Authenticate(
new UserRequest { Email = "test@gmail.com", Password = "Password" });
Assert.IsNotNull(result);
Assert.AreEqual(200, result.HttpResponseCode);
}
}
堆栈跟踪:
UserTests.should_Login()第47行
GenericAdapter`1.GetResult()
AsyncToSyncAdapter.Await(Func`1调用)
TestMethodCommand.RunTestMethod(TestExecutionContext上下文)
执行(TestExecutionContext上下文)
c_uuu显示类1_u0.b_uu0()
BeforeAndAfterTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext上下文,操作)
//用户测试
公共类用户测试
{
Mock UserServiceMock=新建Mock();
专用用户控制器用户控制器;
[设置]
公共作废设置()
{
UserServiceMock.Setup(x=>x.Authenticate(newuserrequest{Email=”antony@gmail.com,Password=“Password1”})
.ReturnsAsync(新的ApiResponse(HttpStatusCode.OK)
{
ResponseObject=新建
{
用户=新
{
Id=1,
Name=“Test”,
电子邮件=”test@gmail.com",
Token=“TokenGen”
}
}
});
}
[测试]
公共异步任务应该\u Login()
{
UserController=新的UserController(UserServiceMock.Object);
var result=await UserController.Authenticate(
新用户请求{Email=”test@gmail.com,Password=“Password”});
Assert.IsNotNull(结果);
AreEqual(200,result.HttpResponseCode);
}
}
用户控制器如下所示
公共类UserController:ControllerBase
{
专用IUserService(用户服务);
公共用户控制器(IUserService用户服务)
{
_userService=userService;
}
[AllowAnonymous]
[HttpPost(“验证”)]
公共任务身份验证([FromBody]UserRequest UserRequest)
{
尝试
{
return\u userService.Authenticate(userRequest);
}
捕获(例外情况除外)
{
var response=new ApiResponse(HttpStatusCode.InternalServerError){ResponseMessage=ex.Message};
返回任务。运行(()=>响应);
}
}
}
您的模拟正在寻找特定的输入(antony@gmail.com
),但您的单元测试正在传递不同的输入。控制器中的Authenticate()返回了一个具有不同结构的对象,该对象已解析。
[AllowAnonymous]
[HttpPost("authenticate")]
public Task<ApiResponse> Authenticate([FromBody] UserRequest userRequest)
{
try
{
return _userService.Authenticate(userRequest);
}
catch (Exception ex)
{
var response = new ApiResponse(HttpStatusCode.InternalServerError) { ResponseMessage = ex.Message };
return Task.Run(() => response);
}
}
}