Вы можете сохранить их в задачах, а затем ждать их всех:
var catTask = FeedCat();
var houseTask = SellHouse();
var carTask = BuyCar();
await Task.WhenAll(catTask, houseTask, carTask);
Cat cat = await catTask;
House house = await houseTask;
Car car = await carTask;
Причина, по которой состояние модели действительна, заключается в том, что при новом обновлении контроллера создается новое состояние модели. Web API не выполняет привязки параметров для вас здесь, поэтому у него даже нет возможности добавлять ошибки состояния модели.
Если вы хотите сохранить это как единичный тест, тогда вы должны добавить
Если вы хотите проверить, что состояние модели недействительно в реальном запросе, я рекомендую вам прочитать это сообщение в блоге:
http://blogs.msdn.com/b/youssefm/archive/2013/01/28/writing-tests-for-an-asp-net-webapi-service.aspx
и попробуйте протестировать сервер с памятью. Одна из незначительных замечаний для вашего случая заключается в том, что вы можете использовать StringContent вместо ObjectContent в запросе, чтобы убедиться, что веб-API пытается десериализовать и соответствующим образом привязать тело.
TL; DR Если вы не хотите читать всю статью, предоставленную Youssef, и хотите быстро решить, как заставить ModelState.IsValid вернуть false. Сделай это.
[TestMethod]
public void TestLogin_InvalidModel()
{
AccountController controller = CreateAccountController();
// new code added -->
controller.ModelState.AddModelError("fakeError", "fakeError");
// end of new code
...
var response = controller.PostLogin(new LoginModel() { });
Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
}
Теперь я могу представить, что CreateAccountController () выглядит примерно так: минимум ->
return new AccountApiController()
{
Request = new HttpRequestMessage(),
Configuration = new HttpConfiguration()
};
Надеюсь, что это даст быстрый ответ для этих поисковых запросов:)
Как уже упоминалось ранее, вам нужны интеграционные тесты для проверки модели ModelState. Итак, с Asp.Net Core, я копаю этот вопрос, чтобы добавить простое решение для интеграции тестов с Asp.Net Core и проверки ModelState
. Добавьте пакет Microsoft.AspNetCore.TestHost
, и вы можете отправлять запросы simple:
var server = new TestServer(new WebHostBuilder().UseStartup<Startup>());
var client = server.CreateClient();
var model = new { Name = String.Empty };
var content = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
var result = await client.PostAsync("/api/yourApiEndpoint", content);
result.StatusCode.Should().Be(HttpStatusCode.BadRequest);
Вы можете найти более подробную информацию об этом здесь: http://asp.net-hacker.rocks/2017/09/27/testing-aspnetcore.html
Надеюсь, что это поможет.