我在Visual Studio 2013中有一个调用本机代码的C ++ CLI测试项目;
[TestMethod]
void Test1()
{
int R1, R2;
R1 = R2 = std::numeric_limits<int>::max();
R1 = SyncPort::OpenPort(Channel, ReceiveChan, PortID, NominalBaud);
R2 = SyncPort::OpenPort(Channel, SendChan, PortID, NominalBaud);
Assert::AreEqual(spSuccess, R1);
Assert::AreEqual(spSuccess, R2);
};
出于某种原因,当我添加两个OpenPort
调用时,测试将从测试资源管理器中消失,无法运行。如果我将它们评论出来,测试会再次出现。
SyncPort
类在单独的.LIB中定义,该.LIB静态链接到测试项目中。如果我定义一个本地具有相同签名的模拟副本类,它就可以工作。我究竟做错了什么?为什么MSTest不喜欢我在测试中添加外部本机函数?
答案 0 :(得分:1)
我解决了这个问题。这是因为SyncPort
程序集缺少延迟加载的依赖项。因此语法是正确的,但它永远不会加载。测试检测引擎在编译后在后台加载测试程序集,尝试加载SyncPort
程序集并失败。
解决方案是修复依赖性问题,这一切都已落实到位。