NUnit so với xUnit


109

Sự khác biệt giữa NUnitxUnit.net là gì? Mục đích của việc phát triển hai trong số họ, không chỉ một?

Tôi đã đọc rằng xUnit đang được phát triển bởi nhà phát minh NUnit:

xUnit.net là một công cụ kiểm tra đơn vị cho .NET Framework. Được viết bởi nhà phát minh ban đầu của NUnit

Mặt khác:

NUnit là một khung kiểm tra đơn vị cho tất cả các ngôn ngữ .Net .. bản phát hành sản xuất hiện tại, phiên bản 2.6, là bản phát hành chính thứ bảy của công cụ kiểm tra đơn vị dựa trên xUnit này

Vậy đâu là sự thật?


3
Như @Joey đã chỉ ra - đây không phải là bản sao hoàn toàn của câu hỏi được liên kết. Trong trường hợp này, OP về cơ bản đã hiểu sai điều gì đó; cụ thể là sự khác biệt giữa xUnit.net - công cụ kiểm thử đơn vị và x Đơn vị - thuật ngữ tổng quát cho loại khung công tác kiểm thử đơn vị (nUnit, jUnit, v.v.). Đang bỏ phiếu để mở lại.
Rob Levine

Câu trả lời:


130

Tại thời điểm viết câu trả lời này, phiên bản NUnit mới nhất là v3.5 và xUnit.net là v2.1.

Cả hai khung đều tuyệt vời và cả hai đều hỗ trợ chạy thử nghiệm song song (mặc dù theo một cách khác). NUnit đã xuất hiện từ năm 2002, được sử dụng rộng rãi, được ghi chép đầy đủ và có một cộng đồng lớn, trong khi xUnit.net hiện đại hơn, TDD chặt chẽ hơn, có thể mở rộng hơn và cũng là xu hướng phát triển .NET Core. Nó cũng được ghi lại.

Ngoài ra, sự khác biệt chính mà tôi nhận thấy là cách xUnit.net chạy các phương pháp thử nghiệm. Vì vậy, trong NUnit , chúng tôi có một lớp thử nghiệm và một tập hợp các phương pháp thử nghiệm trong đó. NUnit tạo một thể hiện mới của lớp thử nghiệm và sau đó chạy tất cả các phương thức kiểm tra từ cùng một thể hiện. Trong khi xUnit.net tạo một phiên bản mới của lớp thử nghiệm cho từng phương thức thử nghiệm. . Do đó, người ta không thể sử dụng các trường hoặc thuộc tính để chia sẻ dữ liệu giữa các phương pháp thử nghiệm là một phương pháp không tốt, vì các phương pháp thử nghiệm của chúng tôi sẽ phụ thuộc vào nhau và điều này không được chấp nhận trong TDD. Vì vậy, nếu bạn sử dụng xunit.net, bạn có thể chắc chắn rằng các phương pháp kiểm tra của bạn hoàn toàn bị cô lập.

Tuy nhiên, nếu bạn sẵn sàng chia sẻ một số dữ liệu giữa các phương pháp thử nghiệm của mình, xUnit sẽ cho phép bạn làm như vậy. Do đó, theo mặc định, tất cả các phương pháp thử nghiệm đều được cách ly hoàn toàn, nhưng bạn có thể cố ý phá vỡ sự cô lập này trong các trường hợp cụ thể. Tôi thích thái độ này, đó là lý do tại sao tôi thích nó hơn.


4
Để biết thêm chi tiết, hãy kiểm tra bài đăng mới nhất của tôi: codopia.wordpress.com/2017/02/20/…
akazemis

1
Những gì bạn viết về thực thi song song là không đúng. Có thể tại thời điểm bạn đăng bài nhưng bây giờ thì không. Kiểm tra xunit.net/docs/running-tests-in-parallel này . Nó nói rằng các phương thức kiểm tra trong một lớp sẽ không bao giờ chạy song song.
Gondil

Cảm ơn @Gondil, bạn nói đúng, nó sẽ không chạy song song các phương thức của một lớp đơn lẻ. tinh chỉnh các bit song song
akazemis

1
Tôi không chắc làm thế nào bạn phát hiện ra rằng xUnit được "ghi lại đầy đủ", vì rõ ràng là không. Tất cả thông tin phải được tìm thấy thông qua các nguồn cộng đồng và các câu hỏi về stackoverflow thay vì tài liệu tốt như NUnit làm. Tôi thực sự vui mừng về xUnit sau câu trả lời của bạn, nhưng nhận thấy rằng NUnit dường như cũng hoạt động tốt trong .NET Core.
CularBytes

1
@Loaderon Tôi đã đăng điều đó khoảng 4 năm trước và tôi đã sử dụng xunit kể từ đó cho đến nay. tài liệu và cộng đồng đã tốt hơn trước đây và giờ nó đã trưởng thành hơn. vì vậy hãy yên tâm sử dụng XUnit, bạn sẽ không cần phải dự phòng cho NUnit. :)
akazemis

33

Bạn đang nhầm lẫn tên của một công cụ duy nhất ( xUnit.net ) với tên của cả lớp khung công tác kiểm thử đơn vị ( xUnit , x đề cập đến một ngôn ngữ / môi trường, ví dụ như JUnit, NUnit, ...).


1
Đáng tiếc, điều này đã kết thúc, vì nó không phải là một bản sao trực tiếp - bạn nói đúng - OP đã nhầm lẫn giữa hai thuật ngữ gần như giống nhau.
Rob Levine

Tôi đã thay đổi một chút tiêu đề, để đảm bảo rằng sẽ không có sự nhầm lẫn.
Ruslan

1
Tôi không đi theo tiêu đề mà là các phân đoạn được đánh dấu của các trích dẫn trong câu hỏi của bạn. Nhưng có lẽ tôi đã hiểu lầm bạn.
Joey

8

Ưu điểm xUnit:

xUnit tuân theo một khái niệm mới bằng cách tránh các phương thức "SetUp" và "TearDown" cũ. Nó buộc chúng ta phải sử dụng IDisposable và một hàm tạo như chúng ta nên làm với tư cách là nhà phát triển .NET. Ngoài ra xUnit có một khái niệm chia sẻ ngữ cảnh rõ ràng.

xUnit Nhược điểm:

Tính khả dụng để lấy bối cảnh thử nghiệm chưa được triển khai.


1
Là gì "kiểm tra bối cảnh" ? Nó đã được thực hiện bởi bây giờ?
Peter Mortensen

8

Một lợi ích của xUnit là nó tìm thấy các bài kiểm tra trong các lớp khác nhau; nó chạy chúng song song . Điều này có thể tiết kiệm rất nhiều thời gian nếu bạn có nhiều trường hợp thử nghiệm.

Tất nhiên, bạn có thể tắt tính năng này hoặc kiểm soát hoạt động của nó (số luồng, luồng trên mỗi lớp, bài kiểm tra trên mỗi tổ hợp, v.v.

Kiểm tra giải pháp mẫu này với hai dự án thử nghiệm, một dự án sử dụng xUnit, còn lại là NUnit .

Bạn có thể đọc thêm về các bài kiểm tra song song trong xUnit tại đây .


Xunit có cách nào khác để làm test cùng lớp chạy song song không?
Magesh
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.