C# 在.NET Core NUnit上的单元测试失败

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

我正在尝试为登录控制器设置测试,但每次运行测试时都会失败。我得到下面的错误。应_Login()中的var结果始终为空

信息: 应为:不为空 但是是:空

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);
        }
    }
}