2012-08-30 35 views
1

使用VS11 RC。我有用C++编写的客户端可执行文件,我试图用C#单元测试库(Metro Style apps)项目进行测试。测试失败,出现异常未注册的类HRESULT 0x80040154(REGDB_E_CLASSNOTRG);我相信这与测试项目中的警告有关:可执行文件'Client.exe'被指定为winmd文件'C:.Client.winmd'的实现。只有进程内服务器支持在应用程序清单中生成注册信息。您需要在应用清单中指定进程外服务器注册信息。如何对Metro可执行文件中定义的类进行单元测试

在我看来,MSTest正在寻找类作为COM对象,并警告告诉我,我需要指定它作为一个进程外的服务器。不幸的是,我不认为我想这样做,因为它是一个可执行文件,即使这是我想要的,我也无法弄清楚如何去做。

我可以简单地将被测试的课程移动到不同的项目中,但是我不想这样做,没有理由比“我无法实现这个目标”更好。

有什么办法可以单元测试在Metro可执行文件中定义的类吗?

+0

我想你需要将你的代码移动到一个DLL中。类型只能从DLL激活。有一些技巧可以将EXE转换为DLL,以便可以激活它的类型,但是我不知道单元测试框架/驱动程序是这样做还是可以做到的。 –

+0

听起来像是对我的回答。你不会有一个偶然的描述类型激活的东西。我正试图掌握一些底层基础设施。 – basilard99

+0

我正在度假,但我会在下周尝试追查好文件。目前关于MSDN的文档很少,所以大多数最好的信息都可以在博客文章和频道9视频中找到(唉)。 –

回答

1

要测试的代码需要移动到DLL中。

本机Windows运行时类型必须在DLL中定义才能成为可激活(这实际上意味着“通过Windows运行时可实例化”)。您的可执行文件不需要通过Windows运行时来实例化它自己定义的类型,但您的单元测试可执行文件需要通过Windows运行时来实例化这些类型。

我建议在DLL中定义所有可以使用的EXE,并尽可能小:让它只是引导应用程序,并将所有真实的代码放入DLL中。

相关问题