C# NUnit System.NullReferenceException毫无意义

C# NUnit System.NullReferenceException毫无意义,c#,maven,nunit,C#,Maven,Nunit,虽然我熟悉JUnit,但对NUnit不太熟悉。我的简单测试失败了,我无法理解 [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-

虽然我熟悉JUnit,但对NUnit不太熟悉。我的简单测试失败了,我无法理解

[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从何而来


更疯狂的是,在某个时候,这个测试通过得很好,所以现在我不知道发生了什么。如果相关,我将使用Maven和NPanday运行测试。

好的,这里有多个问题:

获取正确的NUnit实例配置。我使用的是SharpDevelop而不是Visual Studio,我必须删除对NUnit内部版本的引用,并指向最新安装的版本。由于我使用Maven/NPanday来构建我的项目,很多事情都不如Maven和Java一样好

与数组引用相关的代码中的细微变化。我移动了一些代码,当然逻辑也改变了。当长度为0时,我正在尝试访问commandArguments[0]

这么多年来,我被Java宠坏了。我一直忘了.NET或MicrosoftLand中的“一切”都更难。例如,在Java中,stacktrace默认带有行号。在.NET中,您必须花费数小时的研究,试图找出如何实现这一点

我的特定程序以提升的权限运行,因此禁止正常调试

在解决了所有这些问题之后,我的代码和测试终于可以工作了,大部分都可以工作了。现在我必须弄清楚如何让.NET终止我的TheAD哦,我多么想念Java了


感谢Rick和RJ,您的评论确实很有帮助。

是否可能错误在主方法内部更进一步,与commandArguments参数无关?最好的方法是通过在debug中构建并将调试器附加到nunit控制台应用程序来逐步完成调试。commandArguments在您显示的测试中不会作为null传递,并且不会从您显示的Main部分返回0,因此还有一些问题。将调试器设置为在出现异常时中断,您可能会获得更好的信息。Re 3:在.NET中,如果您已在调试模式下编译,.pdb文件与dll位于同一文件夹中,则堆栈跟踪应具有行号。