如何对Metro可执行文件中定义的类进行单元测试

时间:2012-08-30 01:50:52

标签: mstest c++-cx

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

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

我可以简单地将测试中的课程移到另一个项目中,但我不想在没有理由的情况下做到这一点,而不是“我无法让它工作”。

有没有办法对Metro可执行文件中定义的类进行单元测试?

1 个答案:

答案 0 :(得分:1)

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

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

我建议您在DLL中定义所有内容,并尽可能减少EXE:让它只是引导您的应用程序,并将所有实际代码放在DLL中。