cp.*_*ngr 5 c++ unit-testing visual-studio vs-unit-testing-framework visual-studio-2015
我正在为一些非托管 C++ 代码设置单元测试套件,但我有一些问题。
我使用Visual C++→ Test→将该项目添加到我的解决方案中Native Unit Test Project。
为了弄清楚这个测试框架中的事物是如何分组的,以及什么时候运行什么初始化,我用CppUnitTest.h 顶部的unittest1.cpp修改版本替换了源文件 ( )的内容USAGE EXAMPLE:
#include <CppUnitTest.h>
#include <string>
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
using std::string;
BEGIN_TEST_MODULE_ATTRIBUTE()
TEST_MODULE_ATTRIBUTE(L"Date", L"2010/6/12")
END_TEST_MODULE_ATTRIBUTE()
static string Indent("");
void openBlock()
{
Logger::WriteMessage((Indent + "{").c_str());
Indent += " ";
}
void closeBlock()
{
Indent.resize(Indent.size() >= 2 ? (Indent.size() - 2) : 0);
Logger::WriteMessage((Indent + "}").c_str());
}
TEST_MODULE_INITIALIZE(ModuleInitialize)
{
Logger::WriteMessage((Indent + "In Module Initialize").c_str());
openBlock();
}
TEST_MODULE_CLEANUP(ModuleCleanup)
{
closeBlock();
Logger::WriteMessage((Indent + "In Module Cleanup").c_str());
}
TEST_CLASS(Class1)
{
public:
Class1()
{
Logger::WriteMessage((Indent + "In Class1").c_str());
openBlock();
}
~Class1()
{
closeBlock();
Logger::WriteMessage((Indent + "In ~Class1").c_str());
}
TEST_CLASS_INITIALIZE(ClassInitialize)
{
Logger::WriteMessage((Indent + "In Class Initialize").c_str());
openBlock();
}
TEST_CLASS_CLEANUP(ClassCleanup)
{
closeBlock();
Logger::WriteMessage((Indent + "In Class Cleanup").c_str());
}
BEGIN_TEST_METHOD_ATTRIBUTE(Method1)
TEST_OWNER(L"OwnerName")
TEST_PRIORITY(1)
END_TEST_METHOD_ATTRIBUTE()
TEST_METHOD(Method1)
{
Logger::WriteMessage((Indent + "In Method1").c_str());
Assert::AreEqual(0, 0);
}
TEST_METHOD(Method2)
{
Logger::WriteMessage((Indent + "In Method2").c_str());
Assert::Fail(L"Fail");
Logger::WriteMessage("This won't print due to failure above.");
}
};
Run Code Online (Sandbox Code Playgroud)
它生成了下面的输出。(为了清楚起见,我添加了一些换行符。)
In Module Initialize
{
In Class Initialize
{
In Class1
{
In Method1
}
In ~Class1
In Class1
{
In Method2
}
In ~Class1
}
In Class Cleanup
}
In Module Cleanup
Run Code Online (Sandbox Code Playgroud)
由此我推断:
TEST_MODULE包含零个或多个TEST_CLASSes。TEST_CLASS包含零个或多个TEST_METHODs。TEST_MODULE_INITIALIZE()并且 TEST_MODULE_CLEANUP()在每个es 执行TEST_MODULE之前/之后运行一次TEST_CLASS。TEST_CLASS_INITIALIZE()并且TEST_CLASS_CLEANUP()在执行TEST_CLASS其系列TEST_METHODs之前/之后为每个 运行一次。TEST_METHOD都是 a 的一个实例TEST_CLASS。类构造函数在 之前立即执行TEST_METHOD(),类析构函数在 之后立即执行TEST_METHOD()。TEST_MODULE每个源文件是否应该/必须始终只有一个?可以TEST_MODULE在多个源文件之间拆分吗?什么是最佳实践?TEST_CLASS每个文件我可以有多个TEST_MODULE吗?是否有这方面的最佳实践?ATTRIBUTEs的目的是什么?它们是如何使用的?| 归档时间: |
|
| 查看次数: |
2774 次 |
| 最近记录: |