单元测试引用非托管dll的UWP应用程序会导致System.TypeLoadException

时间:2018-01-10 00:32:12

标签: c# unit-testing uwp mstest xunit

尝试单元测试依赖于.winmd文件的UWP应用程序。 如果单元测试调用应用程序中的一个方法,该方法对非托管dll中的类进行调用,那么我得到一个System.TypeLoadException。我尝试引用不同的.winmd文件并使用MSTest框架或xunit但总是得到相同的错误。其他单元测试工作正常。

问题可以复制..

  • 使用通用Windows测试项目创建新解决方案。
  • 为xunit(xunit,xunit.runner.visualstudio)或MSTest(MSTest.TestFramework,MSTest.TestAdapter)添加所需的nuget包 - 它与任一框架都失败。
  • 添加对非托管dll的引用。我使用了可以作为其中一部分找到的SamplesNative.winmd Windows UI开发实验室 - https://github.com/Microsoft/WindowsUIDevLabs
  • 创建一个调用非托管dll的单元测试。使用上面的SamplesNative我添加了:
    var helper = new DeviceLostHelper();
  • 运行单元测试,它应该失败 - System.TypeLoadException:请求的Windows运行时类型' SamplesNative.DeviceLostHelper'没有注册。 ---> System.Runtime.InteropServices.COMException:未注册的类

任何帮助都会很棒。感谢。

1 个答案:

答案 0 :(得分:1)

经过Microsoft的进一步测试和帮助: https://social.msdn.microsoft.com/Forums/vstudio/en-US/68b9ee55-cd7a-4334-952a-a7ecfff4c6ca/unit-testing-uwp-app-that-references-unmanaged-dll-causes-systemtypeloadexception?forum=vsunittest

我已确定该问题与Resharper有关。如果我禁用Resharper并使用MsTest Framework和测试资源管理器运行单元测试,那么测试工作正常。

我通过在Resharper Options-> Tools-> Unit Testing-> MsTest中取消切换Enable MSTest支持复选框来实现此目的。