使用FakeItEasy测试ASP.NET MVC控制器时遇CS1929错误求助
解决FakeItEasy测试ASP.NET MVC控制器的语法错误
错误根源
你编写的FakeItEasy配置语法存在问题:把Returns()直接链式调用在GetAllItems()的返回结果(Task对象)后,但Returns()是FakeItEasy的IReturnValueConfiguration接口扩展方法,必须依附在A.CallTo()的返回值上,而非目标方法的返回值。
修正后的Fake配置代码
将测试方法中的Fake配置语句修改为:
A.CallTo(() => _factory._userService.GetAllItems()) .Returns(Task.FromResult<IEnumerable<Person>>(fakepersons));
额外优化建议
你当前在构造函数中提前创建了HttpClient,若后续需要修改Fake行为再发起请求,建议将HttpClient的创建移至测试方法内部,确保Fake配置生效后再生成客户端:
[Fact] public async Task GetAllItems_ReturnOkResult_WithListOFItems() { var fakepersons = new List<Person> { new Person{Id=1, Firstname="Test1", Lastname="Test1", Email="Test1"}, new Person { Id = 2, Firstname = "Test2", Lastname = "Test2", Email = "Test2" } }; // 先配置Fake的返回行为 A.CallTo(() => _factory._userService.GetAllItems()) .Returns(Task.FromResult<IEnumerable<Person>>(fakepersons)); // 再创建HttpClient发起请求 using var client = _factory.CreateClient(); var response = await client.GetAsync("/api/Home"); Assert.Equal(HttpStatusCode.OK, response.StatusCode); }
内容的提问来源于stack exchange,提问作者trying
相关产品推荐
相关产品推荐

