2010-09-27 41 views
8
Làm thế nào nhanh hơn nhiều

Roy Osherove, tác giả của The Art Of Đơn vị kiểm tra, có commented trên một blog mà trong nhiều điều NUnit cho là không tốt hơn, nó là nhiều nhanh là một trong số họ.được NUnit so với MSTest

Câu hỏi của tôi là nhanh hơn bao nhiêu, nếu có? Chúng ta đang nói một thứ tự của cường độ? 10%? 50%?

Tôi hỏi điều này bởi vì hiện tại tôi không thể so sánh hai. Tôi đang cố gắng để thiết lập dự án thử nghiệm của tôi để được trong một dual-mode để tôi có thể chuyển đổi giữa chúng. Thật không may, tôi đang gặp một vấn đề với NUnit tích hợp với phiên bản mới nhất của Microsoft nốt ruồi, và cũng NUnit is conflicting with a third party library (appears log4net related).

Cho đến nay MSTest có vẻ dễ sử dụng hơn trong Visual Studio 2008. Tất cả các vấn đề về phiên bản và vấn đề tương thích với NUnit (ít nhất là đối với tôi) đều hướng tôi chọn MSTest làm khung cho dự án (mặc dù tôi có thể giữ tùy chọn chế độ kép). Một cộng cho MSTest là tôi vẫn có thể sử dụng hầu hết các NUnit khẳng định với:

using Assert = NUnit.Framework.Assert; 
using Is = NUnit.Framework.Is; 

Nhưng .... Nếu tốc độ thực sự nhanh hơn nhiều trong NUnit, sau đó tôi muốn sử dụng nó, mặc dù các điểm đau .

Cuối cùng, có cải thiện tốc độ nào trong VS2010 đối với MSTest không?

Trả lời

6

Tôi đã dành thời gian để xóa Microsoft Moles và mã sản xuất xử lý các vấn đề liên quan đến log4net để tôi thực sự có thể so sánh hai vấn đề này. Sau đó, tôi chạy thử nghiệm trong cả hai MSTest 2008 và NUnit 2.5.2.

Điều tôi phát hiện ra là MSTest báo cáo tốt hơn thời gian của mỗi lần thử nghiệm riêng lẻ. Nếu thử nghiệm đủ nhanh trong NUnit, nó sẽ được ghi lại là 0 giây trong tệp TestResults.xml và trong GUI khi một cú nhấp chuột vào các thuộc tính của một thử nghiệm. Tuy nhiên, tôi đã cố gắng để so sánh tổng của tất cả các tốc độ thử nghiệm và trong một số trường hợp NUnit là nhanh hơn và trong các trường hợp khác MSTest là nhanh hơn. Khi cái này nhanh hơn cái kia thì khoảng 30%.

Bây giờ, nơi NUnit chắc chắn có vẻ nhanh hơn là thời gian chờ đợi trước khi thử nghiệm đơn vị chạy. Khi tôi đính kèm GUI (hoặc console) vào VS Debugger, và chạy dự án thử nghiệm, nó mất khoảng 3-6 giây để NUnit khởi động và tải trước khi các thử nghiệm có thể thực thi. Với MSTest phải mất từ ​​15-20 giây. Đối với MSTest, không quan trọng nếu chỉ có 1 bài kiểm tra hoặc 26, thời gian tải này có vẻ giống nhau. Liên quan đến thời gian chờ đợi như thế nào quy mô như dự án thử nghiệm được lớn hơn, nói rằng trong hàng ngàn bài kiểm tra đơn vị, tôi không thể bình luận về sự khác biệt, mặc dù tôi rất muốn biết.

Dường như có một chút chậm trễ trong MSTest trong khi các thử nghiệm đang chạy, có lẽ để cập nhật ngăn kết quả. Vì vậy, tôi nghi ngờ khi mọi người nói rằng NUnit là nhanh hơn nhiều so với MSTest, đó là vì sự chậm trễ tải và cập nhật, nhưng thời gian thực hiện kiểm tra thực tế dường như rất giống nhau.

2

Tôi đã sử dụng cả hai MSTest và NUnit (đầu tiên nhiều hơn sau), và tôi không thể nói tôi nhận thấy bất kỳ sự khác biệt lớn giữa hai người trong số họ liên quan đến tốc độ (không làm cho tôi sai, sự khác biệt có thể được ở đó, tôi chỉ không nhận thấy nó).

Lý do tôi chọn MSTest là sự tích hợp của nó với Visual Studio, vì nó làm cho các hiệu ứng đơn giản hơn rất nhiều. Ngoài ra, một khi tôi đã có một số vấn đề chạy một vài thử nghiệm bởi vì các thử nghiệm NUnit chạy trong một ngăn thread khác với MSTests.

+1

Nếu sử dụng NUnit và có tích hợp VS là quan trọng, bạn có thể sử dụng các trình thử nghiệm bổ sung (như TestDriven.NET và Resharper) để chạy các kiểm tra đơn vị từ bên trong VS. Nó không chính xác giống như phần mềm thử nghiệm được xây dựng sẵn chỉ hoạt động với MSTest. Nhưng nó có thể là một giải pháp tốt cho một số người. –

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