NUnit so với MbUnit so với MSTest so với xUnit.net [đã đóng]


390

Có khá nhiều khung công tác không mong muốn cho .NET. Tôi tìm thấy so sánh tính năng nhỏ này: http://xunit.github.io/docs/comparisons.html

Bây giờ tôi là để chọn một trong những tốt nhất cho chúng tôi. Nhưng bằng cách nào? Có vấn đề gì không? Cái nào là bằng chứng trong tương lai nhất và có một động lực tốt đằng sau nó? Tôi có nên quan tâm đến các tính năng? Trong khi xUnit dường như là hiện đại nhất và được thiết kế riêng cho .NET, NUnit lại dường như là một thứ được chấp nhận rộng rãi. MSTest một lần nữa đã được tích hợp vào Visual Studio ...


11
Bảng so sánh đó là năm lỗi thời. Ví dụ: NUnit cũng có Assert.Throws, v.v. và mọi thứ trong bảng Assertions là API cũ. Cú pháp lưu loát Assert.That (..., Is ....) mới đẹp hơn nhiều và đã xuất hiện rất tốt trong thời gian này.
Jim Cooper

11
Bạn có biết bất kỳ bảng nào được cập nhật hơn?
bitbonk

1
Cuối năm 2013, chuyển từ xUnit.net => NUnit. Cũng lưu ý rằng xUnit.NET (dự án)! = XUnit (danh mục, trong đó NUnit là thành viên)
DeepSpace101

3
@ Vì sao bạn chuyển từ xUnity.net => NUnit?
Alexander Logger

2
Câu hỏi tương tự được hỏi trong 2014 Visual Studio 2013 MSTest vs NUnit
Michael Freidgeim

Câu trả lời:


197

Tôi biết đây là một chủ đề cũ, nhưng tôi nghĩ tôi sẽ đăng một phiếu bầu cho xUnit.NET . Trong khi hầu hết các khung thử nghiệm khác được đề cập đều khá giống nhau, xUnit.NET đã thực hiện một cách tiếp cận khá độc đáo, hiện đại và linh hoạt để thử nghiệm đơn vị. Nó thay đổi thuật ngữ, do đó bạn không còn xác định TestFixenses và Tests ... bạn chỉ định Sự kiện và Lý thuyết về mã của mình, tích hợp tốt hơn với khái niệm thử nghiệm là gì từ phối cảnh TDD / BDD.

xUnit.NET cũng có thể mở rộng TUYỆT VỜI. Các lớp thuộc tính FactAttribution và TraitAttribution của nó không được niêm phong và cung cấp các phương thức cơ sở có thể ghi đè cung cấp cho bạn nhiều quyền kiểm soát về cách các phương thức mà các thuộc tính trang trí nên được thực thi. Mặc dù xUnit.NET ở dạng mặc định cho phép bạn viết các lớp kiểm tra tương tự như các bài kiểm tra NUnit với các phương thức kiểm tra của chúng, nhưng bạn hoàn toàn không bị giới hạn trong hình thức kiểm tra đơn vị này. Bạn có thể mở rộng khung để hỗ trợ các thông số kỹ thuật Quan tâm / Bối cảnh / Quan sát theo kiểu BDD, như được mô tả ở đây .

xUnit.NET cũng hỗ trợ kiểm tra kiểu phù hợp trực tiếp với hộp thuộc tính Lý thuyết và thuộc tính dữ liệu tương ứng. Dữ liệu đầu vào phù hợp có thể được tải từ excel, cơ sở dữ liệu hoặc thậm chí là nguồn dữ liệu tùy chỉnh như tài liệu Word (bằng cách mở rộng thuộc tính dữ liệu cơ sở.) Điều này cho phép bạn tận dụng một nền tảng thử nghiệm duy nhất cho cả kiểm tra đơn vị và kiểm tra tích hợp, trong đó kiểm tra đơn vị có thể rất lớn trong việc giảm sự phụ thuộc sản phẩm và đào tạo cần thiết.

Các cách tiếp cận khác để kiểm tra cũng có thể được thực hiện với xUnit.NET ... khả năng là vô hạn. Kết hợp với một khung mô phỏng rất mong đợi khác, Moq , cả hai tạo ra một nền tảng rất linh hoạt, có thể mở rộng và mạnh mẽ để thực hiện thử nghiệm tự động.


35
Mặc dù điều này đúng một năm trước đây, NUnit đã thêm hầu hết các thuộc tính trong câu hỏi. Trong NUnit, bạn có thể viết bài kiểm tra theo một trong hai cách.
Đánh dấu Levison

8
Nó không quá nhiều về các thuộc tính có sẵn, nhưng làm thế nào chúng có thể được sử dụng. xUnit.NET được thiết kế để trở thành một khung công tác rất linh hoạt và có thể mở rộng, không khóa bạn vào bất kỳ phương pháp thử nghiệm cụ thể nào và không yêu cầu bạn phải thường xuyên cập nhật khung lõi để có được các khả năng mới nhất.
jrista

9
1. Các tên khác nhau trên các thuộc tính sẽ không tạo được nhiều điểm. 2. NUnit đã được mở rộng và nó tiếp tục được mở rộng :? 3. tham số hàng dữ liệu cho các bài kiểm tra được hỗ trợ trong nunit. Thời gian trước họ đã được hỗ trợ trong một phần mở rộng :) 4. Nunit kết hợp với Moq tạo ra điều tương tự. 5. Đối với BDD, tôi muốn nói rằng specflow, tích hợp dễ dàng với nhiều khung thử nghiệm đơn vị.
liệu

8
Tôi thích âm thanh của xUnit, tuy nhiên nó có tài liệu zilch :(
Đại tá Panic

10
xUnit không có tài liệu nào! ví dụ: Hãy thử tìm những gì Traitthực sự làm hoặc nếu bạn có thể nhóm các thử nghiệm khác nhau trong thử nghiệm cha mẹ đơn lẻ (ví dụ: tất cả teststrong phạm vi a testfixture). nUnit tạo ra một chế độ xem phân cấp tuyệt vời thay vì chế độ xem thử phẳng của xUnit. Cộng với danh pháp không có ý nghĩa - sự kiện và lý thuyết? Hãy thực tế! Những người được gọi là kiểm tra và dữ liệu tốt hơn.
DeepSpace101

134

NUnit có lẽ được hỗ trợ nhiều nhất bởi các công cụ của bên thứ 3. Nó cũng tồn tại lâu hơn ba người kia.

Cá nhân tôi không quan tâm nhiều đến các khung kiểm tra đơn vị, các thư viện chế giễu là IMHO quan trọng hơn nhiều (và khóa bạn nhiều hơn nữa). Chỉ cần chọn một và gắn bó với nó.


3
chọn thư viện giả hàng đầu của bạn là gì?
dplante

31
Tôi thích Moq, RhinoMocks cũng tốt.
Alexander Kojevnikov

5
Cũng có thể đáng để kiểm tra Pex và Moles, phần nốt ruồi đặc biệt hữu ích cho việc chế nhạo.
Charles Prakash Dasari

4
MSPec với FakeIt Easy ... làm cho các trường hợp thử nghiệm dễ đọc hơn
Robie

5
MSpec với NSubstolarship và AutoFixture là lựa chọn của tôi.
Daniel Hilgarth

108

Tôi sẽ không đi với MSTest. Mặc dù đây có lẽ là bằng chứng tương lai nhất về các khuôn khổ với Microsoft đằng sau nó không phải là giải pháp linh hoạt nhất. Nó sẽ không chạy một mình mà không có một số hack. Vì vậy, chạy nó trên một máy chủ xây dựng khác ngoài TFS mà không cài đặt Visual Studio là khó. Trình chạy thử nghiệm phòng thu trực quan thực sự chậm hơn Testdriven.Net + bất kỳ khuôn khổ nào khác. Và vì các bản phát hành của khung này được gắn với các bản phát hành của Visual Studio nên có ít cập nhật hơn và nếu bạn phải làm việc với một VS cũ hơn, bạn sẽ bị ràng buộc với MSTest cũ hơn.

Tôi không nghĩ nó quan trọng lắm với những khuôn khổ khác mà bạn sử dụng. Thật dễ dàng để chuyển từ cái này sang cái khác.

Cá nhân tôi sử dụng XUnit.Net hoặc NUnit tùy theo sở thích của đồng nghiệp. NUnit là tiêu chuẩn nhất. XUnit.Net là khung gầy nhất.


36
Tôi đã bị kéo đá và hét lên với kết luận tương tự. Tôi thực sự muốn sử dụng MSTest vì nó tích hợp với Visual Studio, nhưng đó cũng là điểm yếu của nó. Tôi cần chạy thử nghiệm trên máy chủ không phải của Microsoft và không có cách nào tôi cài đặt Visual Studio trên đó để có được điều đó. Thật xấu hổ khi Microsoft sản xuất các công cụ tuyệt vời và sau đó khiến chúng gần như không thể đạt được.
Tim Long

11
+1 để gọi ra sự khủng khiếp đó là MSTest. Vào cuối ngày, bạn không sử dụng khung thử nghiệm đơn vị nào, miễn là nó không phải là MSTest
Mike Mooney

21

Xem xét bổ sung, không thay thế, MSTest với một khung thử nghiệm khác. Bạn có thể duy trì tích hợp Visual Studio MSTest trong khi nhận được các lợi ích của khung thử nghiệm đầy đủ tính năng hơn.

Ví dụ, tôi sử dụng xUnit với MSTest. Thêm một tham chiếu đến hội đồng xUnit.dll và chỉ cần làm một cái gì đó như thế này. Đáng ngạc nhiên, nó chỉ hoạt động!

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Assert = Xunit.Assert;  // <-- Aliasing the Xunit namespace is key

namespace TestSample
{
    [TestClass]
    public class XunitTestIntegrationSample
    {
        [TestMethod]
        public void TrueTest()
        {
            Assert.True(true);  // <-- this is the Xunit.Assert class
        }

        [TestMethod]
        public void FalseTest()
        {
            Assert.False(true);
        }
    }
}

Kỹ thuật này cũng có thể hoạt động cho NUnit, MBUnit hoặc các khung thử nghiệm khác được đề cập trong các câu trả lời khác, nhưng tôi chưa thử chúng.
Matt Crouch

1
Bạn có nghĩ rằng tôi có thể có được các bài kiểm tra tham số để làm việc với MSTest với phương pháp này không, Matt?
DevDave

@DevDave Không. Trong ví dụ của mình, anh ta chỉ sử dụng một lớp từ một hội đồng khác. Nếu bạn muốn kiểm tra tham số hóa, bạn sẽ cần một khung kiểm tra khác được xây dựng cụ thể để mở rộng MSTest.
zoran404

3
Suprisingly, it just works!Bạn vừa gọi một hàm tĩnh từ một hội đồng khác. Tại sao bạn ngạc nhiên rằng nó hoạt động? Ngoài ra nếu bạn chỉ cần xác nhận rằng tại sao không sử dụng một hội đồng được làm riêng cho điều đó?
zoran404

9

Nunit không hoạt động tốt với các dự án chế độ hỗn hợp trong C ++ nên tôi đã phải bỏ nó


3
Tôi không tự hào về câu trả lời này nhưng tôi đã bỏ thử nghiệm đơn vị cho dự án đó. Tôi đã dùng đến việc viết rất nhiều quy trình xác nhận để phát hiện lỗi trong thời gian chạy
Eric

2
Tôi đã hy vọng sử dụng NUnit trong chế độ hỗn hợp nhưng cũng thấy nó không đầy đủ, cuối cùng tôi đã tìm kiếm googletest, một khung kiểm tra đơn vị C ++ tuyệt vời và v đơn giản để thiết lập.
chillitom

8

Nó không phải là một vấn đề lớn ở quy mô nhỏ / cá nhân, nhưng nó có thể trở thành một thỏa thuận lớn hơn một cách nhanh chóng trên quy mô lớn hơn. Chủ nhân của tôi là một cửa hàng lớn của Microsoft, nhưng sẽ không / không thể mua vào Team System / TFS vì một số lý do. Chúng tôi hiện đang sử dụng Subversion + Orcas + MBUnit + TestDriven.NET và nó hoạt động tốt, nhưng để có được TD.NET là một rắc rối lớn. Độ nhạy phiên bản của MBUnit + TestDriven.NET cũng là một rắc rối lớn và có thêm một điều thương mại (TD.NET) để xem xét và mua sắm hợp pháp để xử lý và quản lý, không phải là chuyện nhỏ. Công ty của tôi, giống như nhiều công ty, béo và hài lòng với mô hình Đăng ký MSDN và nó không được sử dụng để xử lý một lần mua sắm cho hàng trăm nhà phát triển. Nói cách khác, ưu đãi MS tích hợp đầy đủ, trong khi chắc chắn không phải lúc nào cũng tốt nhất, theo ý kiến ​​của tôi.

Tôi nghĩ rằng chúng tôi sẽ ở lại với bước hiện tại của mình vì nó hoạt động và chúng tôi đã vượt qua được cái bướu có tổ chức, nhưng tôi chắc chắn rằng MS muốn có một đề nghị hấp dẫn trong không gian này để chúng tôi có thể hợp nhất và đơn giản hóa nhà phát triển của chúng tôi một chút.


2
ReSharper có một đề nghị hấp dẫn trong không gian này!
Squirrel

7
Câu trả lời của bạn là tò mò, và có vẻ tự mâu thuẫn. Bạn nói rằng bạn là một cửa hàng lớn của Microsoft, nhưng sẽ không sử dụng TFS (đó là toàn bộ vấn đề - bạn sẽ không nhận được lợi ích của việc tích hợp dọc mà không có nó) và sử dụng mô hình đăng ký MSDN, nhưng không sử dụng Cách tiếp cận -MS. Thành thật mà nói, tôi đã lạc lối. Thật không may, câu trả lời lỗi thời, không may.
nicodemus13

6

Nó không phải là một vấn đề lớn, nó khá dễ dàng để chuyển đổi giữa chúng. MSTest được tích hợp cũng không phải là một vấn đề lớn, chỉ cần lấy testdriven.net.

Giống như người trước đã nói chọn một khung chế giễu, yêu thích của tôi tại thời điểm này là Moq.

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.