1
私は最初から新しいプロジェクトを開始しています。現在、私はいくつかの要素を設計し、初期段階で単体テストを実装しようとしています。問題は、コントローラーアクションからのヌル応答のように見えるため、ユニットテストが失敗していることです。ウォッチウィンドウで、actionResult
は "式エバリュエータの内部エラー"を表示し、contentResult
はnullです。このコントローラのアクションの結果がnullであるのはなぜですか?
これを修正するにはどうすればよいですか?
の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);
}
}
サービスインターフェース:
を使用する必要がある場合は、テストのキャストにあなたが
List<City>
を使用して間違った型にキャストし' –
Kyle
IEnumerable<City>
'' GetCities'が 'Task@Kyle - actionResult、Statusを返すので 'actionResult'に= RanToCompletion、Result = "System.Web.Http.Results.OkNegotiatedContentResult'1 [System.Collections.Generic.IEnumerable'1 [X.Y.Z.Entities.City]]"。これは正しく表示されますが、contentResultはまだnullです。 – DenaliHardtail
@DenaliHardtailは間違ったタイプにキャストしているためです – Nkosi