NUnit System.NullReferenceException 毫无意义

本文关键字:毫无意义 NullReferenceException System NUnit | 更新日期: 2023-09-27 17:56:08

虽然我熟悉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 System.NullReferenceException 毫无意义

好的,这里有多个问题:

  1. 配置正确的 NUnit 实例。我使用的是SharpDevelop而不是Visual Studio,我不得不删除对NUnit内部版本的引用,并指向最新安装的版本。由于我使用 Maven/NPanday 来构建我的项目,因此许多事情不如 Maven with Java 那么好。

  2. 与数组引用相关的代码的细微更改。我移动了一些代码,当然逻辑也改变了。当长度为 0 时,我试图访问命令参数[0]。

  3. 多年来,我一直被Java宠坏了。我一直忘记了.NET或MicrosoftLand中的"一切"都更难。例如,在Java中,堆栈跟踪默认带有行号。在 .NET 中,您必须花费数小时的研究来弄清楚如何完成这项工作。

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

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

谢谢里克和RJ,您的评论确实有帮助。