7

Tôi có phương thức api web httppost. Tôi cần chuyển mã thông báo dưới dạng tiêu đề ủy quyền và thu thập phản hồi.làm cách nào để đơn vị kiểm tra cuộc gọi bài đăng (web-api) bằng mã thông báo?

Tôi đang sử dụng web-api 2. Phương thức đăng bài của tôi trả về IHttpActionResult ok (mô hình).

Tôi đã thử nghiệm web-api bằng ứng dụng khách POSTMAN, hoạt động.

Tôi bị kẹt tại một điểm, trong đó tôi không thể viết UNIT-TEST để kiểm tra API của mình.

Ngoài ra, tôi không thể có dự án thử nghiệm Đơn vị và dự án web-api trong cùng một giải pháp phải không? Tôi đã thử thiết lập dự án thử nghiệm đơn vị và dự án web-api làm dự án khởi động. Nhưng dự án thử nghiệm đơn vị chỉ là một thư viện để không hoạt động.

Ai đó có thể vui lòng hướng dẫn tôi qua điều này không?

Trả lời

13

Để bắt đầu, bạn thường có dự án Thử nghiệm đơn vị và dự án Api trong cùng một giải pháp. Tuy nhiên, dự án API phải là dự án khởi động. Sau đó, bạn sử dụng trình thám hiểm kiểm tra phòng thu trực quan hoặc một trình tương đương khác (f.x. Một máy chủ xây dựng) để chạy thử nghiệm đơn vị của bạn.

Để kiểm tra bộ điều khiển API, tôi khuyên bạn nên tạo máy chủ thử nghiệm Owin trong các thử nghiệm đơn vị của bạn và sử dụng nó để thực thi các yêu cầu HTTP đối với API của bạn.

[TestMethod] 
    public async Task ApiTest() 
    { 
     using (var server = TestServer.Create<Startup>()) 
     { 
      var response = await server 
       .CreateRequest("/api/action-to-test") 
       .AddHeader("Content-type", "application/json") 
       .AddHeader("Authorization", "Bearer <insert token here>") 
       .GetAsync(); 

      // Do what you want to with the response from the api. 
      // You can assert status code for example. 

     } 
    } 

Tuy nhiên, bạn sẽ phải sử dụng tiêm phụ thuộc để tiêm mocks/cuống. Bạn sẽ phải cấu hình tiêm phụ thuộc của bạn trong một lớp khởi động trong dự án thử nghiệm của bạn.

Here's bài viết giải thích máy chủ thử nghiệm Owin và lớp khởi động chi tiết hơn.

+0

cảm ơn cho câu trả lời :) – user3825003

+0

tôi sẽ upvote này gấp 10 lần nếu tôi có thể! – dcarson

+0

Để xác thực thử nghiệm, hãy xem bài đăng này - http://stackoverflow.com/a/25057928/968003 –

0

Đối với đơn vị dễ dàng, tuyến đường và kiểm tra tích hợp, bạn có thể kiểm tra MyTested.WebApi, cho phép bạn làm như sau:

MyWebApi 
    .Server() 
    .Starts<Startup>() 
    .WithHttpRequestMessage(req => req 
     .WithRequestUri("/api/Books/Get") 
     .WithMethod(HttpMethod.Get) 
     .WithHeader(HttpHeader.Authorization, "Bearer " + this.accessToken)) 
    .ShouldReturnHttpResponseMessage() 
    .WithStatusCode(HttpStatusCode.OK) 
    .WithResponseModelOfType<List<BookResponseModel>>() 
    .Passing(m => m.Count == 10); 
Các vấn đề liên quan