Как я могу написать тест для следующего контроллера без изменения программного кода или минимального изменения программного кода? - PullRequest
0 голосов
/ 22 апреля 2020

Как написать тест для следующего контроллера без изменения программного кода?

ProductController:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> CreateProductAsync(ProductDTO objProduct)
{
    if (ModelState.IsValid)
    {
        HttpClient client = new HttpClient
        {
            BaseAddress = new Uri("http://localhost:2090")
        };
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        HttpResponseMessage response = await client.PostAsJsonAsync<ProductDTO>("/api/Product/Create/{product}", objProduct);
        var ProductDetails = response.Content.ReadAsStringAsync().Result;
        if (response.IsSuccessStatusCode)
        {
            TempData["Message"] = ProductDetails;
            return View();
        }
        ViewBag.MessageViewCreate = ProductDetails;
        return View();
    }
    else { return View(); }
}

Следующее Тест был написан с использованием библиотеки RichardSzalay.MockHttp, в которой обнаружена ошибка:

ProductControllerTest:

    [Fact]
    public async System.Threading.Tasks.Task CreateProductAsync_ReturnsViewForCreateProductAsync()
    {           
        var mockHttp = new MockHttpMessageHandler();
        var product = new ProductDTO
        {
            ProductName = "Product01",
            ProductPrice = 535             
        };            
        mockHttp.When(HttpMethod.Post, "http://localhost:2090//api/Product/Create/{product}")
           .Respond(HttpStatusCode.OK, "application/json","");
        var client = new HttpClient(mockHttp);
        HttpResponseMessage response = await client.PostAsJsonAsync<ProductDTO>("/api/Product/Create/{product}", product);
        //var response = await client.PostAsJsonAsync<ProductDTO>("http://localhost:2090/api/Product/Create/{product}", product);         
        var ProductDetails = await response.Content.ReadAsStringAsync();
        var result = productController.CreateProductAsync(product);           
        Assert.IsType<ViewResult>(result.Result);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...