Visual Studio에서 디버그 모드로 NUnit을 실행하려면 어떻게하나요?


120

저는 최근에 제가 작업해온 약간의 C #에 대한 테스트 프레임 워크를 구축하고 있습니다. 구성 요소를 테스트하기 위해 작업 공간 내에 NUnit이 설정되어 있고 새 프로젝트가 있습니다. Nunit (v2.4)에서 단위 테스트를로드하면 모두 잘 작동하지만 디버그 모드에서 실행하고 몇 가지 중단 점을 설정하는 것이 정말 유용 할 지점에 도달했습니다.

테스트 프로젝트의 '디버그'속성 변경을 제안하는 여러 가이드의 제안을 시도했습니다.

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

거기에서 콘솔 버전을 사용하고 있지만 GUI 호출도 시도했습니다. 둘 다 디버깅을 시도하고 시작할 때 동일한 오류가 발생합니다.

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

일반적으로 \ DSP.nunit을 Nunit GUI에로드하고 테스트가 진행되기 때문입니까?

문제는 VS가 자체 테스트 프레임 워크를 실행하기를 원한다는 것이므로 NUnit 테스트를 찾지 못하는 이유라고 생각하기 시작했습니다.

편집 : 테스트 픽스처에 대해 묻는 사람들에게 TestDSP 프로젝트의 .cs 파일 중 하나는 대략 다음과 같습니다.

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

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

... 저는 C #과 NUnit 테스트 프레임 워크를 처음 접했기 때문에 중요한 정보를 놓쳤을 가능성이 있습니다 ;-)

최종 해결책 : 큰 문제는 제가 사용한 프로젝트였습니다. 당신이 선택하면 Other Languages -> Visual C# -> Test -> Test Project프로젝트 유형을 선택할 때 ..., Visual Studio를 시도하고 내가 말할 수까지로로 자신의 테스트 프레임 워크를 사용합니다. 당신은 선택해야 정상적인 대신 C의 # 클래스 라이브러리 프로젝트를하고 나의 선택 대답의 지침 작동합니다.


당신의 테스트 픽스처 클래스는 나에게 괜찮아 보이므로 당신이 제안한 프로젝트에 있어야합니다.
Patrick McDonald

2
이 질문처럼 보입니다 : stackoverflow.com/questions/247900/… 대답은 동일합니다 ...
Patrick Desjardins

답변:


46

/ assembly 플래그없이 Jon을 시도하는 것과 동일한 기술을 사용합니다.

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에 모든 TestFixture가 포함되어 있습니까?

내 테스트 프로젝트가 솔루션의 시작 프로젝트가 아니기 때문에 테스트 프로젝트를 마우스 오른쪽 단추로 클릭하고 디버그-> 새 인스턴스 시작을 선택하여 테스트를 실행합니다.


1
나는 당신이 제안한 것을 시도했지만 (/ assembly 제거) 차이가 없습니다. 새 인스턴스를 시작하면 오류가 발생합니다. 나는 TestDSP 프로젝트를 만들 때 내장 된 VisualStudio 테스트 프로젝트 템플릿에서 만들었 기 때문에 잘못된 테스트 프레임 워크를 찾고 있다는 사실과 대부분 관련이 있다고 생각합니다.
Jon Cage

3
마침내 작동했습니다. 나는 그것을 막는 프로젝트 옵션만큼이나 맞았습니다. 표준 클래스 템플릿을 사용하여 테스트 프로젝트를 다시 생성하면 문제가 해결되었습니다.
Jon Cage

1
/run테스트 실행을 자동으로 시작하는 * 명령 줄 인수에 추가하면 도움 이됩니다. 또한 내 블로그 게시물 에서 이미지를 사용하여 모두 요약했습니다 .
Robert Koritnik 2012 년

6
사람들이 Robert의 (매우 유용한) 블로그 게시물 ( erraticdev.blogspot.com/2012/01/… )을 확인하지 않는 경우 : .NET 4.0 이상의 경우 nunit.exe.config에도 추가해야한다고 생각합니다. : <startup> <supportedRuntime version = "4.0"/> </ startup>.
devuxer

3
후속 조치 : NUnit의 최신 버전 (현재 최신 버전은 v2.6.1)에서는 nunit.exe.config에서 주석 처리해야합니다 <supportedRuntime version="v2.0.50727" />.
devuxer 2012-08-16

102

NUnit 테스트를 디버깅해야 할 때 nunit-agent.exe"Debug | Attach to Process"를 사용하여 NUnit GUI 애플리케이션에 연결하고 GUI에서 테스트를 실행하기 만하면 됩니다. 내 테스트 (또는 테스트중인 코드)의 모든 중단 점이 적중되었습니다. 내가 당신의 질문을 오해하고 있습니까, 아니면 그것이 당신에게 효과가 있습니까?


7
귀하 (및 다른 사용자) 정보 : Debug | Attach는 VS의 Express 에디션에서 사용할 수 없습니다.
리처드

15
당신이 NUnit과의 설정 대화 상자의 "Visual Studio를 지원 활성화"를 선택해야한다는주의 -> IDE 지원
훌리오 가르시아

8
.NET 4.0 이상의 경우 nunit.exe.config : <startup> <supportedRuntime version="4.0" /> </startup>.
devuxer

1
다음은 올바른 프로세스에 연결하기위한 빠른 바로 가기입니다 (패키지 관리자 콘솔에서 실행) : ($ dte.Debugger.LocalProcesses |? {$ _. Name.EndsWith ( "nunit-agent.exe")}). Attach ()
bart

7
참고 : "nunit.exe"가 아닌 "nunit-agent.exe"라는 프로세스에 디버깅을 첨부해야합니다. 그렇지 않으면 중단 점은 무시되고 그 이유가 궁금해 ...
제니 오라일리

21

다음과 같은 선을 제거하기 만하면됩니다.

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

프로젝트 파일에서. 이 줄은 기본적으로 VS.Net에 테스트 프로젝트이므로 "테스트 프로젝트를 시작할 수 없습니다"라고 알려줍니다. 참고로 여기에 첫 번째 Guid는 "테스트입니다"라고 말하고 두 번째 Guid는 "It 's C #"이라고 말합니다. 해당 Guid에 대한 정보 : http://www.mztools.com/Articles/2008/MZ2008017.aspx


18

@Justin이 제공 한 답변 외에도 NUnit 2.6에 대한 자세한 내용이 있습니다.

NUnit 2.6을 사용하여 에이전트가 아닌 nunit.exe 또는 nunit-console.exe에 연결합니다. @Justin이 언급 한 구성은 약간 다릅니다. 아래는 nunit.exe.config의 예입니다 (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>

.NET 4 테스트 프로젝트의 경우 중단 점을 가져 오려면 주석에서 제안한대로 v2.0 행을 주석 처리하거나 제거해야합니다. 그렇게 한 후에는 .NET 4.0 테스트 프로젝트를 디버깅 할 수있었습니다.


v2.0.50727nunit을 사용하여 VS2005에서 .NET 2 어셈블리를 디버깅 할 때 한 줄 만으로 성공했습니다 . (이 v4라인으로 인해 VS 2005의 디버거가 연결되지 않았습니다.)
Martin Ba

17

NUnit 2.4 이상을 사용하는 경우 SetUpFixture클래스에 다음 코드를 넣을 수 있습니다 . (이전 버전에서도이 작업을 수행 할 수 있지만에 해당하는 모든 작업을 수행 SetUpFixture하거나 테스트 자체에 복사해야합니다.)

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

어떤 Debugger.Launch()일은 당신이 NUnit과 내부 실행을 클릭 할 때 표시 할 수있는 다음과 같은 대화 상자가 원인이다.

JIT 디버거 대화 상자

그런 다음 프로젝트가 열린 상태에서 Visual Studio의 실행중인 인스턴스 (내 스크린 샷의 두 번째 인스턴스)를 선택하면 디버거가 연결되고 Visual Studio에 중단 점 또는 예외가 표시됩니다.


12

Nunit 3.0.1 (VS2013을 사용하고 있습니다)에서 메인 메뉴> 테스트> Windows> 테스트 탐색기에서 엽니 다. 그런 다음 "테스트 탐색기"에서 테스트 케이스를 마우스 오른쪽 단추로 클릭하면 다음이 표시 될 수 있습니다. 여기에 이미지 설명 입력

도움이 되었기를 바랍니다.


2
이 답변에 감사드립니다. 다른 모든 것보다 훨씬 간단합니다.
dano

VS 2015에서 NUnit 2.5.9를 사용하고 있으며 'NUnit 2 Test Adapter'라는 VS 확장으로 작동했습니다. 테스트 탐색기 창에서 테스트를 실행할 수 있습니다.
mggSoft

6

Visual Studio 용 플러그인 인 TestDriven.NET 설치

여기에서 단위 테스트 어셈블리를 마우스 오른쪽 단추로 클릭하고 테스트 실행을 클릭하여 전체 제품군을 실행하거나 TestFixture 클래스를 마우스 오른쪽 단추로 클릭하여 해당 클래스의 테스트 만 실행하거나 테스트 메서드를 마우스 오른쪽 단추로 클릭하여 해당 메서드 만 실행할 수 있습니다.

디버그 모드에서 테스트를 중단해야하는 경우 디버거로 테스트하는 옵션도 있습니다.


2
170 달러는 그러한 도구에 대해 엄청나게 가파르다. 가격 추방, 누구?
Ben Hardy

네. 그런 종류의 돈을 위해 저는 JetBrains Resharper에 투자하여 디버깅 통합 및 기타 여러 생산성 기능과 함께 Test Runner를 무료로 제공합니다.
Roman

Visual Studio 2012를 사용하면 Nuget이 포함 된 NUnit Test Runner를 무료로받을 수 있습니다.
Jon Limjap 2012 년

6

NUnitit-NUnit 테스트 케이스 디버깅을위한 오픈 소스 Visual Studio 추가 기능 사용해보기

홈페이지-http: //nunitit.codeplex.com/


그건 그냥 하나의 테스트를 실행하도록 지시 할 수있는 방법을 찾을 수 있지만 꽤 좋은 (?)
존 케이지


3

이제 사진과 함께 :

  1. NUnit gui ( 여기에서 2.6.2 다운로드 )를 실행 한 다음File -> Open Project

여기에 이미지 설명 입력

  1. .dllbin 폴더 ( C:\......\[SolutionFolder][ProjectFolder]\bin\Debug\xxxxTests.dll) 에서 테스트 를 선택하십시오.

  2. Visual Studio로 이동합니다 Debug -> Attach to process(처리에 연결 창이 열립니다).

  3. 목록에서 아래로 스크롤하여 선택 nunit-agent.exe하고 클릭하십시오.Attach

여기에 이미지 설명 입력

  1. 이 시점에서 테스트의 중단 점이 잘 익은 빨간색으로 변해야합니다 (중공에서).

  2. 클릭 RunNunit Gui당신은 당신의 브레이크 포인트 히트를 받아야합니다 ...

이것이 시간을 절약하기를 바랍니다.


2

콘솔 / 또는 GUI를 작동시킬 수 있지만 중단 점이 적중되지 않는 경우 앱이 NUnit과 다른 .NET 런타임을 실행하고 있기 때문일 수 있습니다. nunit-console.exe.config / nunit.exe.config에 런타임이 지정되어 있는지 확인하십시오 (구성은 nunit exe와 동일한 디렉토리에 있습니다.) 시작 노드를 사용하여 런타임을 지정하십시오.

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

2

프로젝트 경로에 공백이 포함 된 경우 (예 : 경로에 "New Project") <path>\bin\Debug\New Project\Quotes.Domain.Tests.dll시작 옵션-> 명령 줄 인수 프로젝트 경로를 큰 따옴표로 묶습니다.

나는 이것을 알아 내기 위해 많은 시간을 보냈다.


1

Mr. Patrick McDonald가 말한 것에 대하여

내 테스트 프로젝트가 솔루션의 시작 프로젝트가 아니기 때문에 테스트 프로젝트를 마우스 오른쪽 단추로 클릭하고 디버그-> 새 인스턴스 시작을 선택하여 테스트를 실행합니다.

테스트 클래스 라이브러리를 신청하려고했지만 경로와 관련하여 오류가 발생하여 'Command Line Arguments'를 제거하려고했는데 다행스럽게도 예상대로 잘 작동했습니다.


0

잘못된 라이브러리를 사용하려는 것 같습니다. NUnit은 사용중인 dll에 TestFixtures가 포함 된 경우에만 시작할 수 있습니다.

TestDriven.Net에서 +1. 나는 그것을 여러 번 사용할 기회를 가졌습니다. http://testdriven.net/purchase_licenses.aspx 에서 라이선스에 따라 평가 목적으로 개인용 버전을 다운로드 할 수 있습니다 .


최근 편집을 참조하십시오-올바르게 설정하지 않았을 가능성이 있지만 테스트 픽스처가 있습니다.
Jon Cage

0

MSTest에서 동일한 오류가 발생했습니다. 나는에서 발견 테스트 출력 창에서 테스트 중 일부는 중복 ID를했고로드 할 수 없습니다. 모든 중복 테스트를 제거했고 이제 프로젝트를 시작할 때 테스트를 실행할 수있었습니다.


0

또한 테스트 프레임 워크 핸들에서 빌드하는 것처럼 Visual Studio 내에서 테스트를 실행할 수있는 "Visual NUnit"확장도 있습니다. 확장 관리자에서 확인하십시오.


0

Visual Studio 열기 ---> 프로젝트 ---> '속성'선택 ---> '디버그'선택-> '외부 프로그램 시작'을 선택하고 거기에 NUnit의 경로를 설정합니다 (예 : 외부 프로그램 시작 = C : \ Program Files \ NUnit 2.6.2 \ bin \ nunit.exe) ----> 저장

이것을 설정 한 후 디버그를 클릭하십시오.


0

나에게 해결책은 nunit 구성 파일을 조정하는 것이 었습니다. 4.5-.Net 프레임 워크 및 x64 빌드 옵션과 함께 nunit을 사용하려면 시작 태그 (지원되는 런타임 버전)에 한 줄을 추가해야했습니다.

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

그 후 Testproject Debug-> Start new instance를 마우스 오른쪽 버튼으로 클릭하여 시작할 수 있습니다. 이전에는 프로젝트를 프로세스에 다시 수동으로 연결해야했습니다.

내 디버그 속성은 테스트 할 .dll의 위치 인수가있는 C : \ Program Files (x86) \ NUnit 2.6.4 \ bin \ nunit.exe입니다.

추가 정보 : .NET 4.0 테스트 용 nunit


-1

이것이 도움이되는지 확인하십시오 .. Visual Studio에서 NUnit을 추가하는 방법

(RighteousRant) 개인적으로는이 접근 방식이 마음에 들지 않지만 .. 코드를 테스트하는 동안 디버거가 필요하면 코드가 어떻게 작동하는지에 대한 확신이없고 코드가 필요하다는 점에서 "냄새"입니다. 디버거가이를 알려줍니다. TDD가 올바르게 수행되면 디버거가 필요하지 않게됩니다. 드물게 또는 다른 사람의 코드를 입력 할 때만 'NUNit에 디버거 연결'을 사용하십시오.


나는 거기에서 제안을 아무 소용이 없었습니다. 당신은 분명히 좋은 코를 가지고 있습니다. 첫 번째 구현 블록에 대한 출력이 테스트 참조에 대해 매우 다른 답변을 얻고 있기 때문에 내 코드가 작동하지 않는다는 것을 알고 있습니다. 그래서 이제 문제의 원인을 찾기 위해 더 깊이 탐구하려고합니다. 차라리 나머지 프로그램과 분리하여 수행하고 싶습니다 (따라서 디버그 모드에서 단위 테스트를 실행해야 함). 기록을 위해 이것은 다른 사람 알고리즘에서 변환 된 다른 사람이 작성한 코드입니다.-/
Jon Cage

그래서 그것은 내 마지막 줄의 후자 절에 해당합니다. :) 당신이 그것을 작동시킬 수 없다는 것이 이상합니다 .. 너무 나쁩니다. 나는 그것에
머 무르지

여기에는 냄새가 없습니다. 특정 환경에서 실패한 테스트 케이스 (매우 잘못된 결과가 반환 됨)가 있는데 그 이유를 알아 내야합니다. 이를 위해 코드를 수정하고 모든 곳에서 테스트를 통과 할 수 있도록 디버그하고이 환경에서 실패한 부분을 찾고 싶습니다. 이 ... 표준 적색 / 녹색 종류의 물건처럼 보인다
BrainSlugs83

@ BrainSlugs83-이 글을 쓴 지 오랜만입니다. 나는 (여전히) 귀하의 테스트를 주요 작업 관행으로 디버깅하는 것에 반대합니다. 엣지 케이스-디버거로 넘어가도 괜찮습니다. 그런 다음에도 로깅 stmts를 먼저 삽입 할 것입니다. 디버거를 사용하여 Code-Crash-Adjust 주기로 간소화되는 Code-Crash-Debug-Adjust주기를 사용하여 너무 많은 사람들을 관찰 한 사실에서 비롯된 것 같습니다. 계속 켜져 있습니다.
Gishu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.