2014-04-01 2 views
0

JUnit에 익숙하지만, NUnit에 익숙하지 않습니다. 내 (단순) 테스트가 실패하고 그것을 이해할 수 없습니다.NUnit System.NullReferenceException이 감지되지 않음

[INFO] | NUnit-Console version 2.6.3.13283 
[INFO] | Copyright (C) 2002-2012 Charlie Poole. 
[INFO] | Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov. 
[INFO] | Copyright (C) 2000-2002 Philip Craig. 
[INFO] | All Rights Reserved. 
[INFO] | 
[INFO] | Runtime Environment - 
[INFO] | OS Version: Microsoft Windows NT 6.2.9200.0 
[INFO] | CLR Version: 2.0.50727.8000 (Net 3.5) 
[INFO] | 
[INFO] | ProcessModel: Default DomainUsage: Single 
[INFO] | Execution Runtime: net-3.5 
[INFO] | 
[INFO] | Tests run: 1, Errors: 1, Failures: 0, Inconclusive: 0, Time: 0.130717193180073 seconds 
[INFO] | Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0 
[INFO] | 
[INFO] | Errors and Failures: 
[INFO] | 1) Test Error : net.kolotyluk.windows.elevate.ElevateTest.NoArguments 
[INFO] | System.NullReferenceException : Object reference not set to an instance of an object. 
[INFO] | at net.kolotyluk.windows.elevate.Elevate.Main(String[] commandArguments) 
[INFO] | at net.kolotyluk.windows.elevate.ElevateTest.NoArguments() 
[INFO] | 
[INFO] | 
[INFO] +--[ FAILED, result = 1, error output = false] 

내 실제 테스트 코드

[Test] 
public void NoArguments() 
{ 
    String [] arguments = new String[0]; 

    Assert.AreNotEqual(null, arguments); 

    var result = Elevate.Main(arguments); 

    Assert.Equals(0, result); 
} 

하고 테스트중인 내 코드

public static int Main(string[] commandArguments) 
{ 
    if (commandArguments == null) return 0; 

시작 내가, 내 인생에 들어있는 NullReferenceException이 어디에서 오는 알아낼 수 없습니다 .

심지어 더 미친 것은이 테스트가 어느 시점에서 잘 진행되고 있다는 것이므로 지금 무슨 일이 일어나고 있는지 전혀 알지 못합니다. 관련성이있는 경우 NPanday를 사용하여 Maven을 사용하여 테스트를 실행하고 있습니다. 여기

+2

Main 메서드 내부에서 오류가 더 멀리 있고 commandArguments 매개 변수와 아무 관계가 없습니까? 가장 좋은 방법은 디버그를 작성하고 디버거를 nunit 콘솔 앱에 연결하여 단계별 디버그가 될 수 있습니다. –

+2

commandArguments는 표시 한 테스트에서 null로 전달되지 않으며 표시되는 Main 섹션에서 0이 반환되지 않으므로 다른 정보가 잘못 표시됩니다. 디버거를 Break on Exception으로 설정하면 더 나은 정보를 얻을 수 있습니다. –

답변

0

OK, 여러 문제 :

  1. 구성 NUnit과 오른쪽 인스턴스를 얻기. Visual Studio 대신 SharpDevelop를 사용하고 있으며 NUnit의 내부 버전에 대한 참조를 제거하고 최신 설치된 버전을 가리켜 야했습니다. Maven/NPanday를 사용하여 프로젝트를 빌드하므로 많은 것들이 Maven처럼 Java로 작동하지 않습니다.

  2. 배열 참조와 관련된 코드가 미묘하게 변경되었습니다. 나는 약간의 코드를 옮겼다. 물론 로직이 바뀌었다. 길이가 0 일 때 commandArguments [0]에 액세스하려고했습니다.

  3. 저는 수년 동안 Java를 사용하여 버릇이 없었습니다. 나는 .NET 또는 MicrosoftLand에서 '모든 것'이 더 어렵다는 것을 잊고 있습니다. 예를 들어, Java에서 스택 추적에는 기본적으로 줄 번호가 있습니다. .NET에서이 작업을 수행하는 방법을 파악하기 위해 수 시간의 연구를해야합니다.

  4. 내 특정 프로그램은 높은 권한으로 실행되므로 일반적인 디버깅은 사용할 수 없습니다.

이러한 모든 문제를 수정 한 후, 코드와 테스트가 마침내 잘 작동합니다. 이제 .NET에서 내 thead를 종료하는 방법을 알아야합니다.

감사합니다. Rick과 RJ에게 감사드립니다. 귀하의 의견은 도움이되었습니다.

+1

Re # 3 : .NET에서 디버그 모드로 컴파일하고 .pdb 파일이 dll과 같은 폴더에 있으면 스택 추적에 줄 번호가 있어야합니다. –

관련 문제