2009-11-30 23 views
5

Trong một giải pháp VS2008 phức tạp, tôi có ba dự án thử nghiệm đơn vị. Khi chúng hoạt động trên cùng một cơ sở dữ liệu thử nghiệm, điều quan trọng là các dự án thử nghiệm được thực thi sau khi các dự án khác. Nó không phải là quan trọng mà dự án đầu tiên, chỉ là một trong những kết thúc trước khi bắt đầu khác.Trình tự kiểm tra đơn vị khi chạy tất cả các phép thử trong giải pháp

Nếu tôi muốn thực hiện tất cả, có một số cách để làm điều đó, dẫn đến kết quả khác nhau:

  • tôi có một danh sách kiểm tra tập tin .vsmdi nơi các cuộc thử nghiệm được sắp xếp theo dự án. Nếu tôi mở danh sách và thực hiện các bài kiểm tra từ trình soạn thảo danh sách kiểm tra, mọi thứ đều ổn.
  • Nếu tôi mở cửa sổ Kiểm tra xem, sắp xếp các bài kiểm tra theo dự án và chạy chúng, một lần nữa mọi thứ đều ổn.
  • Tuy nhiên nếu chạy thử nghiệm bằng cách chọn 'Test -> Run -> All Tests in Solution' từ trình đơn, chúng sẽ được thực hiện theo thứ tự ngẫu nhiên trong đó một số thất bại, vì một trong các dự án thử nghiệm khác đã thao tác kiểm tra db.

Vì vậy, câu hỏi đặt ra là điều gì xác định trình tự kiểm tra đơn vị khi sử dụng phương pháp thứ ba? Có cách nào để chỉ định danh sách kiểm tra mặc định trong .testrunconfig không?

Vì có giải pháp, vấn đề không quan trọng chút nào. Nhưng mọi ý nghĩ đều được chào đón. Cảm ơn.

Trả lời

8

Bạn đang gặp phải mùi kiểm tra đơn vị được gọi là Thử nghiệm tương tác, được mô tả trong xuất sắc xUnit Test Patterns. Cụ thể hơn, bạn bị Chia sẻ lịch thi đấu, một cách khác để nói rằng một số thử nghiệm của bạn sử dụng cùng một cơ sở dữ liệu được chia sẻ và chúng phụ thuộc vào kết quả của các lần chạy thử trước đó.

Đây là mẫu chống và nên tránh bằng mọi giá. Cuốn sách cung cấp hướng dẫn sâu rộng về cách đối phó với tình huống này.

Lý do tôi bắt đầu bằng cách mô tả điều này là đây là lý do khiến MSTest không đảm bảo thứ tự các bài kiểm tra. Mặc dù thứ tự có vẻ (bán) xác định, bạn không thể dựa vào nó. Một số khung kiểm thử đơn vị khác (xUnit.NET xuất hiện trong đầu) thậm chí đi xa đến mức chạy thử nghiệm theo thứ tự ngẫu nhiên mỗi lần bạn chạy bộ kiểm thử. MSTest không phải là cực đoan, nhưng không có cách nào bạn có thể đặt hàng các bài kiểm tra đơn vị của bạn.

Điều đó nói rằng, nếu bạn đang chạy Visual Studio Team Suite hoặc (Tôi tin) Team Test, có một loại thử nghiệm được gọi là Kiểm tra đặt hàng. Bạn có thể sử dụng nó để xác định rằng tất cả các kiểm thử (bao gồm các kiểm thử đơn vị) nên thực hiện theo một thứ tự cụ thể.

+0

Tôi hoàn toàn đồng ý rằng nên tránh sử dụng vật cố định dùng chung. Tuy nhiên vấn đề ở đây không phải là thứ tự của các bài kiểm tra nhưng thực tế là các dự án thử nghiệm chạy song song dẫn đến các vấn đề đồng bộ hóa với thiết lập và teardown của db. Tôi không mô tả chi tiết đầy đủ. Tôi nghĩ rằng bây giờ giải pháp tốt nhất là thiết lập toàn cầu và teardown của db. – Wullie

+0

Tôi không nghĩ rằng MSTest chạy thử nghiệm song song - ít nhất, đó không phải là kinh nghiệm của tôi cả. –

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