我们目前正在尝试为我们的c++应用程序添加单元测试。该应用程序由30个项目组成,生成29个dll和1个exe。由于MSTest已经包含在Visual Studio 2010中,因此我们使用它来运行我们的单元测试。
对于被声明为“public”的类,测试非常顺利。这些类在开头有以下内容:
但对于其他类(代码的90%),它们没有被声明为public,因此我们无法在测试中使用它们。
我在谷歌上读到了InternalVisibleTo属性,但它似乎只适用于c# .NET程序集。我是对的吗?我也读到了要将我的类声明为“as_friend”,但我不确定应该放在哪里。
简而言之:我想测试DLL中未公开/公共的类。我该怎么做?
谢谢
*编辑*
Gishu评论说,在非托管代码中无法进行单元测试,但确实是可能的。看,这是一个测试本地C ++代码的TestMethod。 CVersion在C ++ MFC中。
对于被声明为“public”的类,测试非常顺利。这些类在开头有以下内容:
#ifdef RESEAU_IMPL
#define CLASS_DECL _declspec(dllexport)
#else
#define CLASS_DECL _declspec(dllimport)
#endif
但对于其他类(代码的90%),它们没有被声明为public,因此我们无法在测试中使用它们。
我在谷歌上读到了InternalVisibleTo属性,但它似乎只适用于c# .NET程序集。我是对的吗?我也读到了要将我的类声明为“as_friend”,但我不确定应该放在哪里。
简而言之:我想测试DLL中未公开/公共的类。我该怎么做?
谢谢
*编辑*
Gishu评论说,在非托管代码中无法进行单元测试,但确实是可能的。看,这是一个测试本地C ++代码的TestMethod。 CVersion在C ++ MFC中。
[TestMethod]
void AssignationCVersion()
{
CVersion version1234(1,2,3,4);
CVersion version4321(4,3,2,1);
Assert::IsTrue(version1234 != version4321);
version1234 = version4321;
Assert::IsTrue(version1234 == version4321);
};
但是似乎不可能使用特殊标签来测试内部函数。我第一个同意测试内部方法并不是好的实践,但这些DLL不仅仅是实用程序函数,它们也是“真正”的应用程序的一部分(也许这是糟糕的设计,但是15年前就这样做了)。有人对此有什么想法吗?