假设有许多托管模块调用非托管模块。测试框架测试托管模块。我想在lib中测试独立的c ++模块,但是让它作为当前测试框架的一部分运行。目前,我正在考虑使用c ++单元测试框架并使用pinvoke从c#测试框架调用单元测试main方法。 c ++将其结果输出到控制台,最后将成功或失败返回到托管测试框架。有什么建议吗?
答案 0 :(得分:2)
我很想编写一个C ++ / CLI填充程序,这样你就可以直接从当前的.NET测试框架中调用你的单元测试,而不是将第二个调用到图片中,并尝试混合和匹配结果。
答案 1 :(得分:0)
我同意Timo的建议,即最好只使用一个测试框架。但是,而不是C ++ / CLI垫片,这需要引入一些新技术并且可能引发困难的封送问题,我的选择是找到一种直接通过p / Invoke调用测试的方法。所以我会使用两种方法中的任何一种(或两种方法)在C ++中编写填充码:
尽可能在C#中编写所有测试逻辑,以便shim函数只是轻轻地包装现有的C ++逻辑,而C#代码就像C ++代码一样调用它们。 (如果将C ++函数分解为可由主应用程序和测试同等使用的DLL,这一点尤其容易。但是,如果您的接口是面向类的,而不是在{{1}中,那么这可能没有意义。然而,即便如此,有时也很容易编写包含类接口的WINAPI
填充程序,将WINAPI
作为this
传递。)无论如何,关键是写得很少新的C ++尽可能。
对于大多数测试逻辑只能用C ++编写的代码,每个测试使用一个LPVOID
函数执行测试步骤并返回结果(例如,返回true / false并填充错误字符串,或者可能抛出异常。)