为什么此控制器操作的结果为空?
Why is the result from this controller action null?
我正在从头开始一个新项目。目前我正在设计一些元素并尝试尽早实施单元测试。问题是单元测试失败,原因似乎是来自控制器操作的空响应。在 Watch Window 中,actionResult
显示 "Internal error in the expression evaluator" 并且 contentResult
为空。
我该如何解决这个问题?
xunit 2.2.0.3545,最小起订量 4.7.63.0
这里是单元测试(xunit):
// Used in the unit tests
private List<City> cities = new List<City>
{
new City { City_Name = "Chicago", City_Code = 1 },
new City { City_Name = "New York", City_Code = 2 },
new City { City_Name = "Seattle", City_Code = 3 }
};
[Fact]
public async Task Get_AllCities_PropertiesArePopulated()
{
// Arrange
var mockService = new Mock<ICityService>();
mockService.Setup(x => x.GetCities()).ReturnsAsync(this.cities);
var controller = new CityController(mockService.Object);
// Act
IHttpActionResult actionResult = await controller.GetCities();
var contentResult = actionResult as OkNegotiatedContentResult<List<City>>;
foreach (var city in contentResult.Content)
{
// doesn't get here due to .Content being null.
}
}
这是我的控制器:
public class CityController : ApiController
{
private readonly ICityService cityService;
public CityController(ICityService svc)
{
this.cityService = svc;
}
public async Task<IHttpActionResult> GetCities()
{
var cities = await this.cityService.GetCities();
if (!cities.Any())
{
return this.BadRequest();
}
return this.Ok(cities);
}
}
服务接口:
public interface ICityService
{
Task<IEnumerable<City>> GetCities();
}
GetCities
return IEnumerable<City>
Task<IEnumerable<City>> GetCities();
但在测试的转换中,您使用 List<City>
将其转换为错误的类型
var contentResult = actionResult as OkNegotiatedContentResult<List<City>>;
什么时候应该使用IEnumerable<City>
var contentResult = actionResult as OkNegotiatedContentResult<IEnumerable<City>>;
我正在从头开始一个新项目。目前我正在设计一些元素并尝试尽早实施单元测试。问题是单元测试失败,原因似乎是来自控制器操作的空响应。在 Watch Window 中,actionResult
显示 "Internal error in the expression evaluator" 并且 contentResult
为空。
我该如何解决这个问题?
xunit 2.2.0.3545,最小起订量 4.7.63.0
这里是单元测试(xunit):
// Used in the unit tests
private List<City> cities = new List<City>
{
new City { City_Name = "Chicago", City_Code = 1 },
new City { City_Name = "New York", City_Code = 2 },
new City { City_Name = "Seattle", City_Code = 3 }
};
[Fact]
public async Task Get_AllCities_PropertiesArePopulated()
{
// Arrange
var mockService = new Mock<ICityService>();
mockService.Setup(x => x.GetCities()).ReturnsAsync(this.cities);
var controller = new CityController(mockService.Object);
// Act
IHttpActionResult actionResult = await controller.GetCities();
var contentResult = actionResult as OkNegotiatedContentResult<List<City>>;
foreach (var city in contentResult.Content)
{
// doesn't get here due to .Content being null.
}
}
这是我的控制器:
public class CityController : ApiController
{
private readonly ICityService cityService;
public CityController(ICityService svc)
{
this.cityService = svc;
}
public async Task<IHttpActionResult> GetCities()
{
var cities = await this.cityService.GetCities();
if (!cities.Any())
{
return this.BadRequest();
}
return this.Ok(cities);
}
}
服务接口:
public interface ICityService
{
Task<IEnumerable<City>> GetCities();
}
GetCities
return IEnumerable<City>
Task<IEnumerable<City>> GetCities();
但在测试的转换中,您使用 List<City>
var contentResult = actionResult as OkNegotiatedContentResult<List<City>>;
什么时候应该使用IEnumerable<City>
var contentResult = actionResult as OkNegotiatedContentResult<IEnumerable<City>>;