Member 14803912 Ответов: 1

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


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

***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);
}

Спасибо

1 Ответов

Рейтинг:
0

F-ES Sitecore

Вы не можете, если вы хотите, чтобы ваш код был модульно тестируемым, вы должны написать его с учетом модульного тестирования.