C#NUnit测试的行为与直接运行时的行为不同

时间:2017-02-16 14:49:56

标签: c# unit-testing nunit

所以我有一些代码(我没写)在运行或调试时作为单元测试工作,但当完全相同的代码与程序正常运行时,它的行为有所不同。我使用安装了NUnit的Visual Studio Ultimate 2013,在Windows 7 64位上运行。要作为单元测试运行,我使用Visual Studio测试资源管理器。我对单元测试并不熟悉,所以我真的希望我忽略了一些简单的事情。

这是代码的样子:

//The code in question
public static void TryThis()
{
    USBHIDDRIVER.USBInterface usbIa = new USBInterface("0");
    String[] list = usbIa.getDeviceList(); //empty when calling from Main()
    Assert.IsNotEmpty(list);
}

//A unit test that calls this code
[Test]
public static void CallingFunction()
{
    TryThis(); //list gets populated and assert passes
}

//Main function that calls this code when program running - doesn't 
public static void Main()
{
    TryThis(); //list remains empty and assert fails
}

代码从System32调用DLL(setupapi.dll是特定的),并且此函数调用是行为发生差异的地方,因此我无法单步查看导致不同行为的确切原因。在整个解决方案中没有[SetUp]或[TearDown]属性或类似的东西。只有[TestFixture]和[Test]。

我的问题是:从单元测试而不是Main()调用TryThis()时可能会有什么不同?

我尝试过的事情:

  • 在调试和发布模式下运行测试以及Main()。
  • 在x86和x64架构中运行测试以及Main()。
  • 指定DLL的完整绝对路径,以确保在两种情况下都加载相同的DLL。
  • 将代码直接复制到Main()和CallingFunction()以避免任何函数调用。
  • 将[Test]属性置于Main()本身上方并作为测试运行(这在测试时运行,而不是在正常运行时运行)。
  • 一次调试并逐步执行代码:在两种情况之间(调试为正常测试和调试),所有变量(autos和locals)都是相同的,直到DLL函数调用为止。
  • 将我的代码编译为自己的DLL库并从另一个应用程序调用它(列表仍为空)以排除Visual Studio的问题。
  • 以管理员身份运行Visual Studio以排除权限问题。
  • 一系列函数调用函数,将函数定义为测试等等。在所有情况下,代码仅在作为测试运行时才有效。
  • 在另一台计算机(同一操作系统)上试用。

我会非常感谢任何反馈或想法,无论它们多么疯狂。最后,我只需要能够在应用程序中使用此代码。谢谢!

0 个答案:

没有答案