Подобный TestFixtureSetUp метод в CppUnit - PullRequest
0 голосов
/ 02 июля 2010

В NUnit атрибут TestFixtureSetup может использоваться для маркировки метода, который должен быть выполнен один раз перед любыми тестами в приборе.

Есть ли аналогичная концепция в CppUnit?

Если нет, существует ли инфраструктура модульного тестирования C ++, поддерживающая эту концепцию?

Основываясь на ответе ниже, вот пример, который выполняет это (следуя советам ответов на этот вопрос):

// 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 Ответ

0 голосов
/ 02 июля 2010

Поскольку вы не можете использовать конструктор фикстур, это означает, что CPPUnit использует экземпляр для каждого теста.Я думаю, вам понадобится метод и статический логический флаг, который читается много раз и записывается только в первый раз.Затем вызовите это в конструкторе.

...