1

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

在我看来,MSTest 正在寻找作为 COM 对象的类,并且警告告诉我需要将其指定为进程外服务器。不幸的是,我不认为我想这样做,因为它是一个可执行文件,即使这是我想要的,我也不知道该怎么做。

我可以简单地将被测类移到另一个项目中,但我不想这样做没有比“我无法让它工作”更好的理由。

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

4

1 回答 1

1

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

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

我建议在 DLL 中定义所有你能做的事情,并让你的 EXE 尽可能小:让它引导你的应用程序,并将你所有的真实代码放在 DLL 中。

于 2012-09-02T01:21:45.957 回答