2008-12-16 51 views
11

Làm cách nào để đơn vị thử nghiệm một dịch vụ web trong C# bằng Visual Studio 2008? Khi tôi tạo một bài kiểm tra đơn vị, nó sẽ thêm một tham chiếu thực sự vào lớp dịch vụ web thay vì một tham chiếu web. Nó đặt các thuộc tính quy định tại:Làm thế nào để kiểm tra đơn vị Dịch vụ Web C# với Visual Studio 2008

http://msdn.microsoft.com/en-us/library/ms243399(VS.80).aspx#TestingWebServiceLocally

Tuy nhiên, nó sẽ hoàn thành mà không cần thực hiện các bài kiểm tra. Tôi đã cố gắng thêm cuộc gọi vào WebServiceHelper.TryUrlRedirection(...) nhưng cuộc gọi không giống như mục tiêu vì nó được kế thừa từ WebService, chứ không phải WebClientProtocol.

+1

Bạn đang sử dụng loại dự án nào cho dịch vụ web? Đây có phải là WCF asmx không? Là trang web hoặc ứng dụng web – JoshBerke

+0

Nó không phải là WCF. Nó chỉ là một dịch vụ web asmx bình thường. –

Trả lời

24

Những gì tôi thường làm là không kiểm tra trực tiếp trên dịch vụ web, nhưng để thử và đặt ít mã nhất có thể trong dịch vụ và gọi một lớp khác thực hiện tất cả công việc thực. Sau đó, tôi viết các bài kiểm tra đơn vị cho lớp kia. Nó chỉ ra rằng lớp đôi khi có thể hữu ích bên ngoài ngữ cảnh dịch vụ web, vì vậy theo cách này - bạn tăng gấp đôi.

+0

Câu trả lời hay. Tôi sẽ cung cấp cho bạn nhiều hơn nếu tôi có thể. Thật không may là điều lớn nhất làm cho các dịch vụ web .asmx khó kiểm tra là toàn bộ phương thức được trang trí với [WebService] (mà chỉ định phương thức như một phương thức webservice) Tạo một giao diện và một lớp giả không hoạt động. Bắt nguồn từ "Fake" không hoạt động. Đề nghị của Doron có vẻ là cách dễ nhất. Điều thú vị là khi tôi trích xuất chức năng vào một lớp có thể kiểm tra, tôi thường gọi đó là lớp Dịch vụ. Vì vậy, cái tôi vừa tạo ra thực sự là một dịch vụ cho một dịch vụ web. Bạn có thể hình dung tên của lớp trông như thế nào :) – SideFX

1

Bạn có thể thêm tham chiếu dịch vụ vào dự án thử nghiệm đơn vị của bạn hoặc tạo sơ khai khách hàng của bạn và đưa lớp vào dự án thử nghiệm đơn vị của bạn.

+0

Vâng, tôi đã làm điều đó.Tôi chỉ tò mò làm thế nào bạn có nghĩa vụ phải làm điều đó "cách Microsoft." AKA cách các tài liệu MSDN chỉ định và cách kiểm tra đơn vị được tạo tự động. –

+0

xấu của tôi, tôi đã bỏ lỡ phần đó. Tôi luôn giữ cho việc triển khai các dịch vụ web của mình càng nhỏ càng tốt và kiểm tra các đối tượng của tôi thay vì dễ dàng hơn nhiều ;-) – JoshBerke

8

Nếu bạn đang viết một dịch vụ web, hãy thử đặt tất cả lôgic trong lớp khác (có thể kiểm chứng). Mỗi phương thức Web phải có một mã nhỏ nhất có thể. Sau đó, bạn sẽ có ít lý do để kiểm tra phương thức web trực tiếp bởi vì bạn có thể kiểm tra các lớp cơ bản.

[WebMethod] 
public void DoSomething() 
{ 
    hander.DoSomething(); 
} 

Nếu bạn đang sử dụng phương pháp web, hãy quấn người gọi được tạo trong trình bao bọc lớp và triển khai giao diện cho trình bao bọc lớp. Sau đó, bất cứ khi nào bạn cần gọi dịch vụ web, hãy sử dụng giao diện để gọi phương thức. Bạn muốn sử dụng giao diện để làm cho trình bao bọc lớp có thể hoán đổi được trong khi thử nghiệm (sử dụng Rhino Mocks, Moq hoặc TypeMock).

0

Trên đơn vị xét nghiệm phương pháp web của tôi, tôi đã điều sau đây:

// TODO: Ensure that the UrlToTest attribute specifies a URL to an ASP.NET page (for example, 
// http://.../Default.aspx). This is necessary for the unit test to be executed on the web server, 
// whether you are testing a page, web service, or a WCF service. 
[HostType("ASP.NET")] 
[UrlToTest("http://localhost/MyWebService")] 

Ngoài những thông thường:

[TestMethod()] 
[DeploymentItem("MyWebService.dll")] 

Mã này đã về từ việc sử dụng Visual Studio 2008 Unit Test Wizard.

0

Biết rằng có hai loại dịch vụ Web. Những người bạn viết cho mình và muốn thử nghiệm, và những người bạn tiêu thụ. Đối với trước đây, các quy tắc trên sẽ được áp dụng. Tuy nhiên, tôi sẽ nói rằng đôi khi tôi thấy các nhà phát triển thử nghiệm đối với các dịch vụ web bên ngoài. Logic quy định rằng dịch vụ của bên thứ ba không đáng tin cậy và do đó yêu cầu thử nghiệm nhiều hơn. Trong lập trình hướng đối tượng, tốt nhất là hiểu sự tách biệt mối quan tâm mà Martin Fowler và những người khác đã nói với chúng tôi. Điều này có nghĩa là chúng ta không nên kiểm tra các hệ thống bên ngoài của riêng mình.

Tuy nhiên, tôi thích viết các lớp trình bao bọc để cung cấp chức năng hữu ích chống lại các dịch vụ. Ví dụ, Bing Maps có một số chức năng mạnh mẽ đáng kinh ngạc. Tôi viết các bài kiểm tra chống lại những điều này chỉ để đảm bảo rằng chúng mang lại cho tôi những giá trị mong đợi. Mặc dù không mở rộng, quan điểm của họ là nếu dịch vụ web chết vì bất kỳ lý do gì (khóa xác thực hết hạn, vv) thì tôi có thể được thông báo về nó thông qua Máy chủ kiểm tra.

Các vấn đề liên quan