Có phải đơn vị đã thử nghiệm sử dụng các dự án, hay chỉ có cùng một không gian tên?


9

Lý lịch

Tôi đang làm việc trên một dự án với C # .NET và tôi vừa thêm một dự án thử nghiệm đơn vị mới vào giải pháp của mình trong Visual Studio. Cách mà tôi luôn luôn làm điều này là:

  1. Tạo một dự án thử nghiệm đơn vị mới.
  2. Có dự án đó bao gồm một tài liệu tham khảo cho dự án đang thử nghiệm .
  3. Chỉ cần bao gồm ( using) dự án.

Tôi đoán theo cách khác bạn có thể làm nó sẽ là ...

  1. Tạo một dự án thử nghiệm đơn vị mới.
  2. Có dự án đó bao gồm một tài liệu tham khảo cho dự án đang thử nghiệm .
  3. Làm cho dự án thử nghiệm đơn vị chia sẻ một không gian tên với dự án đang thử nghiệm .

Câu hỏi

Có một cách được chấp nhận để làm điều này cho các dự án trong thế giới .NET, hay , đây chỉ là một ý kiến ​​và không có gì hơn cho nó?


3
Sử dụng cùng một không gian tên dường như là một cách để kết thúc với xung đột không gian tên. Và bạn vẫn cần một tài liệu tham khảo cho hội đồng chứa mã đang được thử nghiệm.
David Arno

2
Tôi đồng tình với David. Trừ khi bạn cẩn thận đặt tên rõ ràng cho các phương thức thử nghiệm của mình một cái gì đó khác với phương pháp được thử nghiệm, bạn sẽ có nguy cơ xảy ra xung đột khi đặt tên. Tôi chỉ không thấy việc chia sẻ một không gian tên mang lại điều gì cho bữa tiệc.
Robbie Dee

2
Nếu chúng được viết đúng, các bài kiểm tra sẽ không bao giờ xung đột, vì tên phương thức sẽ giống như vậy MethodName_StateUnderTest_ExpectedBehavior()và tôi chắc chắn rằng bạn có thể tìm thấy các tên không xung đột phù hợp cho các lớp kiểm tra. Câu hỏi thực sự là: bạn có thực sự muốn những kiểu đó hiển thị trong intellisense của bạn không?
Robert Harvey

1
@DavidArno TDD không được áp dụng trong mọi tình huống. Nếu tất cả mã của tôi làm là đọc và đọc một số thiết bị điện tử và trả về kết quả (chiếm 99% thời gian cho mã viết EE) ... Tất cả những gì tôi quan tâm là liệu tôi có nhận được giá trị đúng hay không, tại thời điểm đó không quan trọng tôi viết bài kiểm tra trước hay sau.
Snoop

1
@StevieV, lời xin lỗi của tôi, đó không phải là một bình luận nghiêm túc (vì thế là khuôn mặt cười), nhưng tôi đoán nó đã không xảy ra như thế.
David Arno

Câu trả lời:


13

Các thử nghiệm đơn vị của bạn nằm trong một dự án riêng biệt và phục vụ một chức năng riêng biệt từ mã chính của bạn, vì vậy việc đặt chúng vào một không gian tên riêng biệt có ý nghĩa nhất đối với tôi.

Nếu bạn đang xem xét đưa chúng vào cùng một không gian tên chỉ để lưu usingdòng, thì không. Ít mã là tốt, mã rõ ràng hơn là tốt hơn.


2
Và bạn không muốn phát hành / phân phối / triển khai thử nghiệm đơn vị.
radarbob

1
Đặt các thử nghiệm trong một không gian tên riêng biệt đảm bảo (bằng một số ngôn ngữ) rằng bạn đang xem API với tư cách là người tiêu dùng bên thứ ba, tức là không truy cập các thành viên chỉ có thể truy cập vào các lớp trong cùng một không gian tên. Thuận tiện, các bài kiểm tra của bạn sẽ làm im lặng mọi cảnh báo giả mạo về các thành viên API công khai của bạn không được kiểm tra hoặc tiếp xúc không cần thiết.
StackOverthrow

@TKK Câu hỏi là về C # và trong C #, không gian tên không hoạt động như thế.
Svick

@svick: có, và C # không bắt buộc bạn phải cung cấp cho mỗi cụm không gian tên riêng của nó. Tuy nhiên, đó là một quy ước hữu ích, đặc biệt là trong các dự án lớn hơn và tôi sẽ không xử lý một hội đồng thử nghiệm đơn vị khác với bất kỳ hội nghị nào khác về điều này.
Doc Brown

0

Tôi đã sử dụng dự án thử nghiệm đơn vị có cùng không gian tên với dự án thực (bằng cách xóa thủ công Testshậu tố trên không gian tên dự án thử nghiệm) trong một vài năm mà không có vấn đề gì.

Tôi nghĩ rằng nó dẫn đến mã đơn giản hơn vì vậy tôi thường đề nghị đi theo cách tiếp cận đó. Một số nhược điểm, như xung đột không gian tên tiềm năng, không nên xảy ra khi xử lý một dự án thử nghiệm đơn vị vì bạn đã tuân theo một số quy ước kiểm tra cho điều đó, như áp dụng tất cả các lớp kiểm tra Tests. Ngoài ra, với tôi nghe có vẻ khá trực quan khi có các lớp và các lớp kiểm tra trong cùng một không gian tên.

Một số người sẽ nghĩ nó lạ, nhưng điều này thực sự không nên, vì rất nhiều hội đồng khung cũng sử dụng chiến lược này có nhiều DLL có các lớp trong cùng một không gian tên: nó không phải là một điều đáng ngạc nhiên hay xấu thực hành trong và của chính nó.

Tôi thực sự nghĩ rằng cái này thiên về sở thích cá nhân, vì vậy nó không thực sự "có thể trả lời" được. Đã nói rằng, "phiếu bầu của tôi", theo lý luận ở trên, là để tự mình thử nó, và nếu bạn thích cách tiếp cận, hãy thực hiện nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.