Unit test, NUnit hay Visual studio?


114

Tôi đang sử dụng Visual studio (đôi khi là bộ sạc lại) để chạy thử nghiệm đơn vị của mình.

Tôi đã nghe nói về NUnit, nhưng tôi không biết nhiều điều về nó ...

Tôi có nên quan tâm đến nó không? Nó có thể cung cấp thứ gì đó tốt hơn studio trực quan không?

Tôi có nên sử dụng NUnit không và tại sao?


12
cũng xem xét xUnit, tuy nhiên bất cứ điều gì bạn làm có một cái nhìn một TestDriven.net
Ian Ringrose


thử xunit.net. Nó là mã nguồn mở và khung kiểm tra đơn vị đẹp cho ứng dụng .net.
Mukesh Arora

Câu trả lời:


100

NUnit có một vài lợi thế so với MS-Test

  1. Thuộc tính Suite - có thể tổng hợp các bài kiểm tra và thực hiện chúng riêng biệt (hữu ích cho các dự án lớn với các bài kiểm tra nhanh và chậm chẳng hạn)
  2. Phương thức Xác nhận có thể đọc, ví dụ: Assert.AreEqual(expected, actual)vsAssert.That(actual, Is.EqualTo(expected))
  3. NUnit thường xuyên cập nhật phiên bản - MS-Test chỉ có một phiên bản cho mỗi phiên bản VS.
  4. Nhiều trình chạy tích hợp bao gồm Resharper và TestDriven.NET
  5. Xác nhận thông báo ngoại lệ mong đợi - có thể được thực hiện bằng thuộc tính trong NUnit nhưng phải được thực hiện bằng Try-Catch trong MS-Test
  6. [TestCase]! NUnit cho phép kiểm tra tham số.

32
Ngoại lệ cũng có thể được xác nhận bằng thuộc tính trong MS-Test :pectExceptionAttribute.
Stefan Steinegger

9
Tôi sẽ sử dụng NUnit với Assert.Throws <> () vì điều này tuân theo Nguyên tắc AAA, không thông qua cho cách thuộc tính.
Oliver Hanappi

25
# 3 không phải là một tính năng, đó là một vấn đề và # 5 là sai 100%; MS Test có thuộc tính Dự kiến ​​ngoại lệ và luôn luôn có .
Randolpho

4
@Elisha Như tôi nhớ lại, họ đã cố tình không hỗ trợ kiểm tra nội dung tin nhắn vì văn bản không được coi là quan trọng và có thể là tùy ý. Đó là, nó không ảnh hưởng đến luồng của một chương trình.
Rob Kent

7
"# 3 không phải là một tính năng, đó là một vấn đề" - không âm thanh như một cách rất nhanh nhẹn suy nghĩ ...
SamuelKDavis

72

Từ quan điểm hiện tại của tôi (sau 8 tháng phát triển với khoảng 10 nhà phát triển trung bình) Tôi sẽ tư vấn cho chống sử dụng MSTest vì những lý do sau đây

  • Bản thân khung làm việc khá chậm. Ý tôi không phải là mã kiểm tra mà bạn viết - điều đó nằm trong tầm kiểm soát của bạn. Ý tôi là khung chạy các thử nghiệm đó chậm, cho dù nó đang chạy một bộ thử nghiệm, thử nghiệm đơn lẻ, v.v.
  • Sự cần thiết phải giữ một tệp Siêu dữ liệu thử nghiệm luôn dẫn đến sự phức tạp khi một số nhà phát triển đang làm việc trên nó (tạo lại, ví dụ như siêu dữ liệu, v.v.). Mọi bộ thử nghiệm khác không cần tệp siêu dữ liệu. Thật tuyệt khi tổ chức các bài kiểm tra của bạn nhưng bạn có thể đạt được điều tương tự thông qua không gian tên, lớp và tên phương thức.
  • Thực hiện Tích hợp liên tục, nếu bạn muốn chạy các bài kiểm tra đơn vị trên máy xây dựng của mình, bạn sẽ cần cài đặt Visual Studio trên máy đó.

Nói cách khác, nếu tôi phải quyết định lại 8 tháng trước, tôi có thể sẽ chọn NUnit. Tôi có thể không có báo cáo kết quả thử nghiệm tích hợp, nhưng các nhà phát triển sẽ có trải nghiệm thử nghiệm liền mạch hơn.


6
+1, tránh MSTest trừ khi bạn không có lựa chọn. Các khung công tác mã nguồn mở khác nhau tốt hơn (xUnit, NUnit, MbUnit, v.v.).
Brannon

49

Đây là kinh nghiệm của tôi với MS Test

  • Chúng tôi đang chạy Thử nghiệm MS với khoảng 3800 Thử nghiệm.
  • Phải mất rất nhiều thời gian để các bài kiểm tra bắt đầu thực hiện, điều này gây khó khăn khi chạy các bài kiểm tra đơn lẻ.
  • Cần khoảng 1GB Bộ nhớ để thực hiện các bài kiểm tra. Không, đó không phải là do rò rỉ bộ nhớ trong các thử nghiệm của chúng tôi. Chúng tôi thường xuyên gặp phải OutOfMemoryExceptions.
  • Bởi vì nó sử dụng nhiều tài nguyên đó, chúng tôi đang bắt đầu thực hiện các bài kiểm tra từ các tệp hàng loạt. Vậy tích hợp toàn bộ có ích lợi gì?
  • Nó có lỗi và không ổn định:
    • Ví dụ: nếu bạn xóa Thuộc tính [Bỏ qua] khỏi một bài kiểm tra, nó sẽ không nhận ra nó, vì nó lưu trữ thông tin về các bài kiểm tra ở đâu đó. Bạn cần làm mới danh sách kiểm tra, điều này đôi khi giải quyết được sự cố hoặc khởi động lại VS.
    • Nó ngẫu nhiên không sao chép các hội đồng tham chiếu vào thư mục theout.
    • Các Mục Triển khai (các tệp bổ sung sẽ được sử dụng) không hoạt động bình thường. Chúng được bỏ qua một cách ngẫu nhiên.
  • Có thông tin ẩn (không hiển thị trong mã kiểm tra) trong tệp vsmdi và testrunconfig. Nếu bạn không quan tâm đến nó, nó có thể không hoạt động.
  • Về mặt chức năng, nó có thể tương đương với NUnit, nhưng nó rất đắt nếu bạn cân nhắc sử dụng phiên bản VS tester.

Bổ sung: Chúng tôi hiện có một số bài kiểm tra nữa, thậm chí không thể nói là bao nhiêu. Không thể chạy tất cả chúng từ Visual Studio nữa, vì OutOfMemoryExceptions và các vấn đề mất ổn định khác. Chúng tôi chạy các bài kiểm tra từ các tập lệnh. Sẽ rất dễ dàng để xem kết quả kiểm tra trong Visual Studio, nhưng khi giải pháp được mở, VS bị treo (mọi lúc). Vì vậy, chúng tôi cần tìm kiếm các bài kiểm tra không đạt bằng cách sử dụng tìm kiếm văn bản. Không có lợi thế của một công cụ tích hợp nữa.


Cập nhật khác : Chúng tôi đang sử dụng VS 2013 ngay bây giờ. Rất nhiều thứ đã thay đổi. Họ đã viết lại người chạy thử nghiệm MS Test lần thứ ba kể từ khi chúng tôi bắt đầu. Điều này gây ra rất nhiều thay đổi đột phá, nhưng không phiên bản mới nào hoạt động tốt hơn. Chúng tôi rất vui vì chúng tôi đã không sử dụng các tính năng ưa thích của MS Test, vì tất cả chúng đều không được hỗ trợ nữa. Nó thực sự là một điều xấu hổ. Chúng tôi vẫn đang sử dụng các tập lệnh để xây dựng và chạy tất cả các bài kiểm tra đơn vị, vì nó đơn giản hơn. Visual Studio cần một vài phút để bắt đầu chạy thử nghiệm (đo thời gian sau khi biên dịch cho đến khi thử nghiệm đầu tiên bắt đầu). Họ có thể sửa nó bằng một bản cập nhật và đây có thể là một vấn đề cụ thể của dự án của chúng tôi. Tuy nhiên, Resharper nhanh hơn nhiều khi chạy các thử nghiệm tương tự.

Kết luận : Ít nhất khi kết hợp với Resharper, MS Test rất hữu ích. Và tôi hy vọng rằng cuối cùng họ cũng tìm ra cách trình chạy thử nghiệm nên được viết như thế nào và sẽ không thực hiện loại thay đổi phá vỡ này khi chúng tôi cập nhật Visual Studio vào lần tới.


Tôi vừa mới bắt đầu chạy chúng mà không cần gỡ lỗi, làm cho nó nhiều nhanh hơn và nhiều hơn nữa như thế nào NUnit có thể được sử dụng, nhưng nó vẫn còn sucky. Có vẻ như hiệu suất kém có liên quan đến việc Visual Studio thực hiện các nội dung sôi nổi khi gỡ lỗi. (Nghĩa là, sử dụng "ctrl + F5" thay vì chỉ "F5" - bạn vẫn có được "tích hợp" tốt đẹp với VS)
Arafangion

Tốt câu trả lời, tiết kiệm thời gian của tôi
FindOutIslamNow

18

NUnit có thể được sử dụng kết hợp với studio trực quan. Nó là một khuôn khổ không phải là một chương trình riêng biệt. Vì vậy, bạn có thể quan tâm xem nó có phù hợp với bạn không :).

văn bản thay thế http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802

"Sau khi cài đặt plugin, bạn sẽ tìm thấy một menu con mới trong menu công cụ."

Xem http://nunitit.codeplex.com/ để biết thêm thông tin về cách nhập nó.

Ngoài ra, có thể tìm thấy rất nhiều bằng cách sử dụng tìm kiếm SO. Chủ đề này liệt kê các ưu điểm của NUnit so với thử nghiệm tiêu chuẩn MS.



3

NUnit hoạt động với phiên bản Tiêu chuẩn của VS.


1
Đừng quên các phiên bản thể hiện của Visual Studios.
chobo2

Sau xây dựng bước vào dự án lắp ráp thử nghiệm đơn vị - \ path \ to \ nUnit $ (TargetFileName)
Steve Gilham

1

Tôi không chắc về những người khác nhưng NUnit cung cấp GUI và giao diện điều khiển đẹp mắt để chạy Unit Test của bạn và bạn cũng có thể tạo báo cáo kết quả thực hiện NUnit Test để cung cấp thông tin chi tiết về việc ở đó bài kiểm tra đã thất bại hay vượt qua và cũng là lúc nó đã xảy ra. làm bài kiểm tra đơn vị của bạn


1

NUnit là một khung kiểm thử đơn vị, cũng được hỗ trợ bởi resharper. Tôi nghĩ rằng bạn đang sử dụng khung kiểm tra đơn vị của Microsoft, vì vậy NUnit chỉ là một sự thay thế cho sản phẩm của Microsoft;)

Đây là liên kết đến trang chủ của NUnit: http://nunit.org


vậy ý ​​bạn là nunit không mang lại điều gì khác ngoài khung kiểm tra đơn vị microsoft?
Tim

Nó không, hãy xem liên kết của tôi chẳng hạn trong bài đăng của tôi (ở trên).
bastijn

Tôi đang sử dụng NUnit và không thực sự biết về khung kiểm tra đơn vị của Microsoft, vì vậy tôi không thể nói điều gì tốt hơn. Tôi nghĩ rằng có một cơ hội tốt là bạn sẽ tìm thấy một số chủ đề về sự khác biệt ở đây trên SO.
Oliver Hanappi

Nó cung cấp một số cấu trúc hữu ích như [TestCase] ​​để chạy một phương pháp thử nghiệm với các nhóm khác nhau, [Lý thuyết] - để xây dựng các thông số kỹ thuật phức tạp hơn và các cấu trúc khác. Nó cũng hỗ trợ cú pháp thông thạo rất đẹp cho các xác nhận. Và, cuối cùng nhưng không kém phần quan trọng, nó được sử dụng rộng rãi hơn nhiều so với MSTest, vì vậy bạn sẽ có cơ hội tốt hơn để nhận hỗ trợ / thông tin nếu bạn gặp rắc rối.
Elder_george 12/10/09

0

Trong NUnit , các bài kiểm tra không được thực hiện song song. Thay vào đó, có vẻ như tất cả các bài kiểm tra đều thực thi trên một luồng duy nhất. Trong MSTest, mỗi bài kiểm tra được khởi tạo trên một luồng riêng biệt, điều này dẫn đến các lần chạy được xen kẽ. Do đó, nếu thử nghiệm A phụ thuộc vào thử nghiệm B về sự thành công của nó, nó có khả năng sẽ thất bại vì thử nghiệm B có thể sẽ bắt đầu chạy khi thử nghiệm A đang chạy.


-12

Nếu bạn đang sử dụng Visual Studio Bạn phải sử dụng NUnit để thực hiện kiểm tra đơn vị và nếu bạn đang chạy java (Netbeans), bạn phải sử dụng JUnit để kiểm tra đơn vị.

Đây là một ví dụ cho một bài kiểm tra đơn vị máy tính đơn giản

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SimpleCalculator;
using NUnit.Framework;

namespace CalculatorTest
{
    [TestFixture]
    public class Class1
    {
        public Calculator _calculator;
        [TestFixtureSetUp]
        public void Initialize()
        {
            _calculator = new Calculator();
        }
        [Test]
        public void DivideTest()
        {
            int a = 10;
            int b = 2;
            int expectedValue = a / b;
            int actualvalue = _calculator.Divide(a, b);
            Assert.AreEqual(expectedValue, actualvalue,"Failure");

        }
    }
}

4
Tất nhiên bạn không nhất thiết phải sử dụng NUnit, nó chỉ là một framework, không ai ép buộc bạn phải sử dụng nó. Bạn thậm chí có thể viết một cái của riêng bạn nếu bạn cảm thấy nhàm chán.
HimBromBeere
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.