CppUnit 中的类似 TestFixtureSetUp 的方法
Posted
技术标签:
【中文标题】CppUnit 中的类似 TestFixtureSetUp 的方法【英文标题】:TestFixtureSetUp-like method in CppUnit 【发布时间】:2010-07-02 03:13:04 【问题描述】:在 NUnit 中,TestFixtureSetup 属性可用于标记应在夹具中的任何测试之前执行一次的方法。
CppUnit中有类似的概念吗?
如果没有,是否有支持此概念的 C++ 单元测试框架?
根据下面的答案,这是一个实现此目的的示例(遵循this 问题的答案的建议):
// Only one instance of this class is created.
class ExpensiveObjectCreator
public:
const ExpensiveObject& get_expensive_object() const
return expensive;
private:
ExpensiveObject expensive;
;
class TestFoo: public CppUnit::TestFixture
CPPUNIT_TEST_SUITE(TestFoo);
CPPUNIT_TEST(FooShouldDoBar);
CPPUNIT_TEST(FooShouldDoFoo);
CPPUNIT_TEST_SUITE_END();
public:
TestFoo()
// This is called once for each test
void setUp()
// This is called once for each test
void FooShouldDoBar()
ExpensiveObject expensive = get_expensive_object();
void FooShouldDoFoo()
ExpensiveObject expensive = get_expensive_object();
private:
const ExpensiveObject& get_expensive_object()
static ExpensiveObjectCreator expensive_object_creator;
return expensive_object_creator.get_expensive_object();
;
【问题讨论】:
【参考方案1】:由于您不能使用夹具构造函数,这意味着 CPPUnit 每次测试都使用实例。我认为你必须有一个方法和一个静态布尔标志,它被多次读取并且只在第一次写入。然后在构造函数中调用这个。
【讨论】:
每次测试似乎仍然调用了夹具构造函数。 使用静态似乎是有道理的。我会试试看。我仍然想知道是否有更好的解决方案。这似乎是一个很常见的成语。 实际上现在不鼓励这样做。流行的想法是在每个测试中设置和拆除,每个测试一个实例,请参阅此处以获取有关为什么这是一个好主意的更多信息:martinfowler.com/bliki/JunitNewInstance.html 和 blogs.msdn.com/b/jamesnewkirk/archive/2004/12/04/275172.aspx 这些文章中的推理确实有道理。我已经使用我使用的解决方案更新了示例。谢谢!以上是关于CppUnit 中的类似 TestFixtureSetUp 的方法的主要内容,如果未能解决你的问题,请参考以下文章