2009-10-12 75 views
109

Tôi đang sử dụng Visual studio (đôi khi chia sẻ lại) để chạy thử nghiệm đơn vị của mình.Kiểm tra đơn vị, NUnit hoặc Visual studio?

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 không? Nó có thể cung cấp một cái gì đó tốt hơn so với studio trực quan?

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

+12

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

+0

@Ian 1 cho TDD. – magnus

+0

Xem thêm http://stackoverflow.com/questions/707444/nunit-vs-team-system-unit-test –

Trả lời

90

NUnit có vài ưu điểm so với MS-Test

  1. thuộc tính Suite - có thể tổng hợp kiểm tra và thực hiện chúng một cách riêng biệt (hữu dụng cho các dự án lớn với các xét nghiệm nhanh và chậm ví dụ)
  2. phương pháp
  3. Readable Khẳng định, ví dụ Assert.AreEqual(expected, actual) vs Assert.That(actual, Is.EqualTo(expected))
  4. NUnit có cập nhật phiên bản thường xuyên - MS-Test chỉ có một phiên bản VS.
  5. Nhiều vận động viên tích hợp bao gồm Resharper và TestDriven.NET
  6. dự kiến ​​thông điệp ngoại lệ khẳng định - 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
  7. [TestCase]! NUnit cho phép kiểm tra tham số-ized.
+29

Ngoại lệ cũng có thể được khẳng định bởi thuộc tính trong MS-Test: ExpectedExceptionAttribute. –

+7

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

+0

@Stefan Steinegger, MSTest đã dự kiến ​​thuộc tính ngoại lệ nhưng nó không thể xác minh văn bản tin nhắn – Elisha

1

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

Dưới đây là liên kết tới trang chủ của NUnit: http://nunit.org/index.php

+0

để bạn có nghĩa là nunit không mang bất kỳ thứ gì khác ngoài khung kiểm tra đơn vị microsoft? – Tim

+0

Nó có, xem liên kết của tôi ví dụ trong bài viết của tôi (ở trên). – bastijn

+0

Tôi đang sử dụng NUnit và không thực sự biết về khung kiểm thử đơ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 mà bạn sẽ tìm thấy một số chủ đề về sự khác biệt ở đây trên SO. –

18

NUnit thể được sử dụng kết hợp với thị giác studio. 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ếu nó phù hợp với bạn :).

alt text http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802

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

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

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

1

Tôi không chắc chắn những người khác nhưng NUnit cung cấp GUI và giao diện điều khiển đẹp để chạy Kiểm tra Đơn vị của bạn và bạn cũng có thể tạo báo cáo kết quả thực hiện Kiểm tra NUnit. và cũng phải mất bao nhiêu thời gian để thử nghiệm đơn vị của bạn

3

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

+1

Đừng quên phiên bản Express của Visual Studios. – chobo2

+0

Bước xây dựng sau trên dự án lắp ráp thử nghiệm đơn vị - \ path \ to \ nUnit $ (TargetFileName) –

63

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

  • Khung trong chính nó là khá chậm. Tôi không có nghĩa là mã kiểm tra mà bạn viết - đó là do bạn kiểm soát. Ý tôi là khuôn khổ chạy những kiểm tra còn chậm, cho dù nó đang chạy một bộ thử nghiệm, kiểm tra đơn, vv
  • Sự cần thiết phải giữ một Test-Tập tin mà luôn luôn dẫn đến những biến chứng khi một số nhà phát triển đang làm việc trên nó (tạo lại ví dụ: 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. Nó là loại tốt đẹp để tổ chức các bài kiểm tra của bạn nhưng bạn có thể đạt được tương tự thông qua không gian tên, các 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 thử nghiệm đơn vị trên máy xây dựng của mình, bạn sẽ cần phải 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ẽ dùng 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.

+0

+1, cùng trải nghiệm tại đây. –

+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, vv). – Brannon

46

Dưới đây là kinh nghiệm của tôi với MS thử nghiệm

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

Addition: Chúng tôi có một số xét nghiệm hơn bây giờ, có thể thậm chí không biết có bao nhiêu. Không thể chạy tất cả chúng nữa từ Visual Studio, vì OutOfMemoryExceptions và các vấn đề không ổn định khác. Chúng tôi chạy thử nghiệm từ tập lệnh. Nó sẽ được dễ dàng để xem kết quả kiểm tra trong Visual Studio, nhưng khi giải pháp được mở, VS tai nạn (mỗi lần). Vì vậy, chúng ta cần phải tìm kiếm các bài kiểm tra thất bại 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: Hiện tại chúng tôi đang sử dụng VS 2013. Rất nhiều thứ đã thay đổi. Họ viết lại thử nghiệm thử nghiệm MS 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 phải phiên bản mới nào cũng làm 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, bởi vì tất cả chúng đều không được hỗ trợ nữa. Nó thực sự là một sự xấu hổ. Chúng tôi vẫn đang sử dụng các kịch bản để xây dựng và chạy tất cả các bài kiểm tra đơn vị, bởi vì nó là thủ công. Visual Studio yêu cầu một vài phút để bắt đầu chạy thử nghiệm (các biện pháp 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 chữa nó với một bản cập nhật và điều này có thể là một vấn đề cụ thể của dự án của chúng tôi. Tuy nhiên, Resharper là nhanh hơn nhiều khi chạy các bài kiểm tra tương tự.

Kết luận: Ít nhất là 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ọ đã tìm ra cách mà người chạy thử nghiệm sẽ được viết và sẽ không thực hiện loại thay đổi đột phá này khi chúng tôi cập nhật Visual Studio lần sau.

+0

Gần đây tô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. Dường như hiệu suất kém có liên quan đến Visual Studio làm những thứ sôi nổi khi gỡ lỗi. (Tức là, sử dụng "ctrl + F5" thay vì chỉ "F5" - bạn vẫn nhận được "tích hợp" tốt đẹp với VS) – Arafangion

+0

3,800! may mắn bạn, hãy tưởng tượng 29,948, NUNIT được khá đau đớn vào thời điểm này .. –

+0

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

5

Lợi thế lớn nhất MS-Test trên NUnit là MS-Test có thể tạo ra các đối tượng giả sử dụng Reflection. Tôi thấy nó rất hữu ích

+10

http://code.google.com/p/moq/, http://www.nmock.org/, http : //stackoverflow.com/questions/37359/what-c-mocking-framework-to-use –

-11

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ị.

Dưới đây là một ví dụ cho một đơn vị kiểm tra 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"); 

     } 
    } 
} 
+2

Tất nhiên bạn làm * không * phải sử dụng NUnit, nó chỉ là một khuôn khổ, không ai buộc bạn phải sử dụng nó. Bạn thậm chí có thể viết của riêng bạn nếu bạn đang chán. – HimBromBeere

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