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 的方法的主要内容,如果未能解决你的问题,请参考以下文章

VS2005配置CPPUnit进行单元測试

使用 cppunit 时出错

安装 CppUnit 库和 CppUnit 包括

使用 CPPUnit 的 Printf 样式断言

CPPUNIT:我们真的每次测试都需要一个函数吗?

如何使用 Visual Studio 2012 构建 cppunit