Làm cách nào để chạy NUnit trong chế độ gỡ lỗi từ Visual Studio?


120

Gần đây tôi đang xây dựng một khuôn khổ thử nghiệm cho một chút C # mà tôi đang làm việc. Tôi đã thiết lập NUnit và một dự án mới trong không gian làm việc của tôi để kiểm tra thành phần. Tất cả đều hoạt động tốt nếu tôi tải các bài kiểm tra đơn vị của mình từ Nunit (v2.4), nhưng tôi đã đến mức thực sự hữu ích khi chạy ở chế độ gỡ lỗi và đặt một số điểm ngắt.

Tôi đã thử các đề xuất từ ​​một số hướng dẫn đều đề xuất thay đổi các thuộc tính 'Gỡ lỗi' của dự án thử nghiệm:

Start external program: C:\Program Files\NUnit 2.4.8\bin\nunit-console.exe
Command line arguments: /assembly: <full-path-to-solution>\TestDSP\bin\Debug\TestDSP.dll

Tôi đang sử dụng phiên bản console ở đó, nhưng cũng đã thử gọi GUI. Cả hai đều cho tôi cùng một lỗi khi tôi thử và bắt đầu gỡ lỗi:

Cannot start test project 'TestDSP' because the project does not contain any tests.

Điều này có phải do tôi thường tải \ DSP.nunit vào Nunit GUI và đó là nơi tổ chức các bài kiểm tra không?

Tôi bắt đầu nghĩ rằng vấn đề có thể là VS muốn chạy khung thử nghiệm của riêng nó và đó là lý do tại sao nó không tìm thấy các thử nghiệm NUnit?

Chỉnh sửa : Đối với những người hỏi về đồ đạc thử nghiệm, một trong các tệp .cs của tôi trong dự án TestDSP trông giống như sau:

namespace Some.TestNamespace
{
    // Testing framework includes
    using NUnit.Framework;

    [TestFixture]
    public class FirFilterTest
    {
        [Test]
        public void Test01_ConstructorTest()
        {
            ...some tests...
        }
    }
}

... Tôi khá mới với C # và khung kiểm tra NUnit nên hoàn toàn có thể tôi đã bỏ lỡ một số thông tin quan trọng ;-)

Giải pháp cuối cùng : Vấn đề lớn là dự án tôi đã sử dụng. Nếu bạn chọn Other Languages -> Visual C# -> Test -> Test Project... khi bạn đang chọn loại dự án, Visual Studio sẽ thử và sử dụng khung thử nghiệm của riêng nó theo như tôi có thể nói. Thay vào đó, bạn nên chọn một dự án thư viện lớp C # bình thường và sau đó các hướng dẫn trong câu trả lời đã chọn của tôi sẽ hoạt động.


Đối với tôi, lớp cố định thử nghiệm của bạn trông ổn, vì vậy nó phải là một thứ gì đó trong dự án như bạn đã đề xuất.
Patrick McDonald

2
Trông giống như câu hỏi này: stackoverflow.com/questions/247900/... Câu trả lời là như nhau ...
Patrick Desjardins

Câu trả lời:


46

Tôi sử dụng kỹ thuật tương tự như bạn đang thử Jon, không có cờ / assembly, tức là

Start External Program: C:\Program Files\NUnit 2.4.8\bin\nunit.exe

Command line arguments: "<path>\bin\Debug\Quotes.Domain.Tests.dll"

TestDSP.dll có chứa tất cả các TestFixtures của bạn không?

Vì dự án thử nghiệm của tôi không phải là dự án khởi động trong giải pháp, tôi chạy thử nghiệm của mình bằng cách nhấp chuột phải vào dự án thử nghiệm và chọn Gỡ lỗi -> Bắt đầu phiên bản mới


1
Tôi đã thử những gì bạn đề xuất (loại bỏ / lắp ráp) nhưng nó không tạo ra sự khác biệt. Khi tôi bắt đầu phiên bản mới, nó tạo ra lỗi. Tôi nghĩ chủ yếu là do khi tôi tạo dự án TestDSP, tôi đã tạo nó từ mẫu dự án thử nghiệm VisualStudio được tích hợp sẵn nên nó đang tìm kiếm khung thử nghiệm sai.
Jon Cage

3
Cuối cùng thì nó cũng hoạt động. Tôi đã đúng rất nhiều vì chính các tùy chọn dự án đã ngăn chặn nó - việc tạo lại dự án thử nghiệm bằng cách sử dụng mẫu lớp tiêu chuẩn đã khắc phục sự cố.
Jon Cage

1
Sẽ hữu ích nếu bạn cũng thêm /runvào các đối số dòng lệnh * của mình, đối số này sẽ tự động bắt đầu thực hiện các bài kiểm tra ... Tôi cũng đã tóm tắt tất cả (sử dụng hình ảnh) trong bài đăng trên blog của mình .
Robert Koritnik

6
Trong trường hợp mọi người không xem bài đăng trên blog (rất hữu ích) của Robert ( faildev.blogspot.com/2012/01/… ): cho .NET 4.0 trở lên, tôi tin rằng bạn cũng phải thêm nó vào nunit.exe.config : <startup> <supportsRuntime version = "4.0" /> </startup>.
devuxer

3
Tiếp theo: Trong các phiên bản mới hơn của NUnit (phiên bản mới nhất hiện nay là v2.6.1), bạn cần nhận xét <supportedRuntime version="v2.0.50727" />trong nunit.exe.config.
devuxer

102

Khi tôi cần gỡ lỗi các bài kiểm tra NUnit của mình, tôi chỉ cần đính kèm vào ứng dụng NUnit GUI nunit-agent.exebằng cách sử dụng "Debug | Attach to Process" và chạy các bài kiểm tra từ GUI. Bất kỳ điểm ngắt nào trong các thử nghiệm của tôi (hoặc mã mà họ đang thử nghiệm) đều bị tấn công. Tôi hiểu sai câu hỏi của bạn, hay điều đó sẽ phù hợp với bạn?


7
Đối với thông tin của bạn (và của những người khác): Debug | Attach không có sẵn trong các phiên bản Express của VS.
Richard

15
Hãy lưu ý rằng bạn phải chọn "Enable Visual Studio hỗ trợ" trên hộp thoại Cài đặt của NUnit -> IDE Hỗ trợ
Julio Garcia

8
Đối với .NET 4.0 trở lên, tôi tin rằng bạn cũng phải thêm cái này vào nunit.exe.config : <startup> <supportedRuntime version="4.0" /> </startup>.
devuxer

1
Đây là một lối tắt nhanh để đính kèm vào đúng quy trình (chạy trong Bảng điều khiển Trình quản lý Gói): ($ dte.Debugger.LocalProcesses |? {$ _. Name.EndsWith ("nunit-agent.exe")}). Attach ()
bart 14/02/13

7
FYI: bạn cần đính kèm gỡ lỗi vào quy trình có tên "nunit-agent.exe" chứ KHÔNG phải "nunit.exe". Nếu không breakpoint của bạn sẽ được bỏ qua và bạn tự hỏi tại sao ...
Jenny O'Reilly

21

Chỉ cần xóa dòng trông giống như

<ProjectTypeGuids>
    {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>

từ tệp dự án của bạn. Về cơ bản dòng này cho VS.Net biết rằng đó là một dự án Thử nghiệm, do đó, "Không thể bắt đầu dự án thử nghiệm". FYI ở đây Hướng dẫn đầu tiên nói "đó là một bài kiểm tra", Hướng dẫn thứ 2 nói "đó là C #". Để biết thông tin về các Guids đó: http://www.mztools.com/Articles/2008/MZ2008017.aspx


18

Ngoài câu trả lời được cung cấp bởi @Justin, đây là một số chi tiết khác cho NUnit 2.6.

Sử dụng NUnit 2.6 đính kèm vào nunit.exe hoặc nunit-console.exe và KHÔNG phải tác nhân. Cấu hình được @Justin lưu ý là hơi khác. Dưới đây là một ví dụ từ nunit.exe.config (tương tự cho nunit-console.exe.config).

<startup useLegacyV2RuntimeActivationPolicy="true">
  <!-- Comment out the next line to force use of .NET 4.0 -->
  <supportedRuntime version="v2.0.50727" />  
  <supportedRuntime version="v4.0.30319" />
</startup>

Đối với dự án thử nghiệm .NET 4, để đạt được điểm ngắt, bạn sẽ phải nhận xét hoặc xóa dòng v2.0 như nhận xét gợi ý. Sau khi làm điều đó, tôi đã có thể gỡ lỗi dự án thử nghiệm .NET 4.0.


Tôi đã thành công chỉ với v2.0.50727dòng khi gỡ lỗi tổ hợp .NET 2 từ VS2005 với nunit. ( v4Dòng đã ngăn trình gỡ lỗi của VS 2005 đính kèm.)
Martin Ba

17

Nếu bạn đang sử dụng NUnit 2.4 hoặc mới hơn, bạn có thể đặt mã sau vào SetUpFixturelớp của mình . (Bạn có thể làm điều này với các phiên bản cũ hơn nhưng bạn sẽ cần phải làm bất kỳ điều gì tương đương với SetUpFixturehoặc sao chép nó vào chính bài kiểm tra.)

[SetUpFixture]
public class SetupFixtureClass
{
    [SetUp]
    public void StartTesting()
    {
        System.Diagnostics.Debugger.Launch();
    }
}

Debugger.Launch()Nguyên nhân là gì khiến hộp thoại sau hiển thị khi bạn bấm Chạy bên trong NUnit.

Hộp thoại trình gỡ lỗi JIT

Sau đó, bạn chọn phiên bản visual studio đang chạy của mình khi dự án của bạn đang mở (cái thứ 2 trong ảnh chụp màn hình của tôi), trình gỡ lỗi sẽ được đính kèm và mọi điểm ngắt hoặc ngoại lệ sẽ hiển thị trong Visual Studio.


12

Trong Nunit 3.0.1 (Tôi đang sử dụng VS2013), Mở từ menu chính> Kiểm tra> Windows> Kiểm tra Explorer. Sau đó, trong "Trình khám phá thử nghiệm", nhấp chuột phải vào trường hợp thử nghiệm, bạn có thể thấy: nhập mô tả hình ảnh ở đây

Hi vọng điêu nay co ich.


2
Cảm ơn vì câu trả lời này. Đơn giản hơn nhiều so với tất cả những người khác.
dano

Tôi đang sử dụng NUnit 2.5.9 trong VS 2015 và nó hoạt động với một tiện ích mở rộng VS có tên là 'Bộ điều hợp thử nghiệm NUnit 2'. Bạn có thể thực hiện kiểm tra trên cửa sổ Test Explorer.
mggSoft

6

Cài đặt TestDriven.NET , là một plugin cho Visual Studio

Từ đó, bạn có thể nhấp chuột phải vào cụm kiểm thử đơn vị của mình và nhấp vào Chạy thử nghiệm để chạy toàn bộ bộ phần mềm, nhấp chuột phải vào một lớp TestFixture để chỉ chạy các thử nghiệm trong lớp đó hoặc nhấp chuột phải vào một phương pháp Kiểm tra để chạy chỉ phương thức đó.

Bạn cũng có tùy chọn Kiểm tra Với Trình gỡ lỗi, nếu bạn cần chia nhỏ các thử nghiệm của mình ở chế độ gỡ lỗi.


2
170 đô la là rất cao đối với một công cụ như vậy. Giá cả, có ai không?
Ben Hardy

Vâng. Đối với loại tiền đó, tôi muốn đầu tư vào JetBrains Resharper, sau đó cung cấp cho Test Runner miễn phí với tích hợp gỡ lỗi và một loạt các tính năng năng suất khác.
Roman

Với Visual Studio 2012, bạn có thể tải miễn phí NUnit Test Runner với Nuget.
Jon Limjap

6

Hãy thử NUnitit - một Addin Visual Studio mã nguồn mở để gỡ lỗi các trường hợp kiểm tra NUnit

Trang chủ - http://nunitit.codeplex.com/


Điều đó khá tốt mặc dù tôi không thể tìm ra cách bảo nó chỉ chạy một bài kiểm tra duy nhất (?)
Jon Cage


3

Bây giờ với hình ảnh:

  1. Chạy NUnit gui ( Tải xuống 2.6.2 từ đây ) rồi truy cậpFile -> Open Project

nhập mô tả hình ảnh ở đây

  1. Chọn bài kiểm tra của bạn .dlltừ thư mục bin (C:\......\[SolutionFolder][ProjectFolder]\bin\Debug\xxxxTests.dll )

  2. Đi tới Visual Studio Debug -> Attach to process (Đính kèm vào cửa sổ xử lý sẽ mở ra)

  3. Từ danh sách, cuộn xuống và chọn nunit-agent.exerồi nhấp vàoAttach

nhập mô tả hình ảnh ở đây

  1. Tại thời điểm này, các điểm ngắt trong thử nghiệm của bạn sẽ chuyển sang màu đỏ chín (từ rỗng).

  2. Nhấp Runvào Nunit Guivà bạn sẽ nhận được điểm dừng của mình ...

Hy vọng điều này giúp bạn tiết kiệm thời gian.


2

Nếu bạn có thể làm cho giao diện điều khiển / hoặc GUI hoạt động, nhưng các điểm ngắt của bạn không bị tấn công, có thể là do ứng dụng của bạn đang chạy thời gian chạy .NET khác với NUnit. Kiểm tra xem liệu nunit-console.exe.config / nunit.exe.config của bạn có thời gian chạy được chỉ định hay không. (Các cấu hình nằm trong cùng thư mục với exe của nunit.) Chỉ định thời gian chạy bằng cách sử dụng nút khởi động:

<configuration>
    <startup>
       <supportedRuntime version="4.0" />
    </startup>

2

Nếu đường dẫn dự án chứa khoảng trắng, ví dụ: "Dự án mới" trong đường dẫn <path>\bin\Debug\New Project\Quotes.Domain.Tests.dll thì hãy đặt Start Option -> Command Line Arguments trong dấu ngoặc kép.

Tôi đã dành rất nhiều thời gian để tìm ra điều này.


1

Về những gì ông Patrick McDonald nói

Vì dự án thử nghiệm của tôi không phải là dự án khởi động trong giải pháp, tôi chạy thử nghiệm của mình bằng cách nhấp chuột phải vào dự án thử nghiệm và chọn Gỡ lỗi -> Bắt đầu phiên bản mới

Tôi đã cố gắng đăng ký thư viện lớp thử nghiệm của mình nhưng gặp một số lỗi liên quan đến đường dẫn, vì vậy tôi đã cố gắng xóa 'Đối số dòng lệnh' và may mắn là nó hoạt động tốt và như mong đợi.


0

Có vẻ như bạn đang cố sử dụng sai thư viện. NUnit chỉ có thể bắt đầu nếu dll bạn đang sử dụng có chứa TestFixtures.

+1 trên TestDriven.Net. Tôi đã có cơ hội sử dụng nó một số lần. Bạn có thể tải xuống phiên bản cá nhân cho các mục đích đánh giá theo giấy phép tại http://testdriven.net/purchase_licenses.aspx .


Xem bản chỉnh sửa gần đây - Tôi có một bộ cố định thử nghiệm mặc dù hoàn toàn có thể tôi đã thiết lập nó không chính xác.
Jon Cage

0

Tôi gặp lỗi tương tự với MSTest. Tôi nhận thấy rằng trong cửa sổ Đầu ra thử nghiệm , một số thử nghiệm có ID trùng lặp và không thể tải được. Tôi đã xóa tất cả các bài kiểm tra trùng lặp và bây giờ tôi đã có thể chạy các bài kiểm tra khi bắt đầu dự án.


0

Hiện nay cũng có một tiện ích mở rộng "Visual NUnit" cho phép bạn chạy các bài kiểm tra từ bên trong Visual studio giống như các xử lý của khung công tác kiểm tra xây dựng. Kiểm tra nó trong trình quản lý tiện ích mở rộng.


0

Mở Visual Studio ---> dự án của bạn ---> Chọn 'Thuộc tính' ---> Chọn 'Gỡ lỗi' -> Chọn 'Bắt ​​đầu chương trình bên ngoài' và đặt đường dẫn NUnit của bạn ở đó (Ví dụ: Bắt đầu chương trình bên ngoài = C : \ Program Files \ NUnit 2.6.2 \ bin \ nunit.exe) ----> Lưu

Sau khi thiết lập, chỉ cần nhấp vào Gỡ lỗi


0

Đối với tôi, giải pháp là điều chỉnh tệp cấu hình nunit. Để sử dụng nunit với khung 4.5-.Net và tùy chọn xây dựng x64, tôi phải thêm một dòng vào thẻ khởi động (phiên bản thời gian chạy được hỗ trợ).

<startup useLegacyV2RuntimeActivationPolicy="true">
        <!-- Comment out the next line to force use of .NET 4.0 -->
        <supportedRuntime version="v4.0.30319" />
</startup>

Sau đó, tôi có thể bắt đầu bằng cách nhấp chuột phải vào Testproject Debug -> Bắt đầu phiên bản mới. Trước đây, tôi cần phải đính kèm lại dự án theo cách thủ công vào quy trình.

Thuộc tính Gỡ lỗi của tôi là C: \ Program Files (x86) \ NUnit 2.6.4 \ bin \ nunit.exe với đối số là vị trí của tệp .dll sẽ được kiểm tra.

Thông tin thêm: nunit để thử nghiệm với .NET 4.0


-1

Xem liệu điều này có giúp ích không .. Cách thêm NUnit trong Visual Studio

(Ri RightRant) Mặc dù cá nhân tôi không thích cách tiếp cận này .. Nếu bạn cần một trình gỡ lỗi khi đang chạy thử mã của mình, thì đó là "mùi" ở chỗ bạn không có đủ tự tin / biết cách mã của mình hoạt động và cần trình gỡ lỗi để cho bạn biết điều đó. TDD sẽ giải phóng bạn khỏi cần trình gỡ lỗi nếu được thực hiện đúng. Chỉ sử dụng 'Đính kèm trình gỡ lỗi vào NUNit' cho những trường hợp hiếm hoi hoặc khi bạn đang tìm hiểu mã của người khác.


Tôi đã thử các đề xuất ở đó nhưng không có kết quả. Bạn rõ ràng có một chiếc mũi tốt. Tôi biết mã của mình không hoạt động vì đầu ra tôi nhận được cho khối triển khai đầu tiên nhận được các câu trả lời cực kỳ khác cho tham chiếu thử nghiệm của tôi. Vì vậy, bây giờ tôi đang cố gắng nghiên cứu sâu hơn để tìm ra nguyên nhân của vấn đề. Tôi muốn làm điều đó một cách riêng biệt với phần còn lại của chương trình (do đó cần phải chạy các bài kiểm tra đơn vị trong chế độ gỡ lỗi). Đối với hồ sơ, đây là mã của người khác viết rằng đã được chuyển đổi từ một thuật toán người: - /
Jon Cage

Vì vậy, điều đó rơi vào mệnh đề sau của dòng cuối cùng của tôi :) Thật lạ là bạn không thể làm cho nó hoạt động mặc dù .. quá tệ. Tôi muốn nói chỉ đính kèm vào quá trình (Alt + D + P) mà không cần ở trên đó ..
Gishu

Không có mùi gì ở đây - tôi có một trường hợp thử nghiệm không thành công trong một số môi trường nhất định (kết quả trả về rất sai) và tôi cần tìm hiểu lý do. Để làm điều đó, tôi muốn gỡ lỗi nó và tìm ra lỗi của nó ở đâu trong môi trường này để tôi có thể sửa mã và thực hiện bài kiểm tra ở mọi nơi. Điều này có vẻ như tiêu chuẩn màu đỏ / loại thứ màu xanh lá cây ...
BrainSlugs83

@ BrainSlugs83 - lâu rồi tôi mới viết cái này. Tôi (vẫn) chống lại việc gỡ lỗi các bài kiểm tra của bạn như một phương pháp làm việc chính. Các trường hợp cạnh - Tôi không sao với việc chuyển sang trình gỡ lỗi. Thậm chí sau đó, tôi có thể sẽ chèn các stm ghi nhật ký trước .. Tôi nghĩ nó bắt nguồn từ thực tế là tôi đã quan sát thấy quá nhiều người sử dụng chu trình Code-Crash-Debug-Adjust được sắp xếp hợp lý thành chu kỳ Code-Crash-Adjust với trình gỡ lỗi liên tục.
Gishu
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.