Очистка объекта Boost Test Fixture между тестами - PullRequest
2 голосов
/ 22 декабря 2009

У меня проблема с буст-юнит-тестированием. По сути, я создаю прибор, который является частью набора для модульного тестирования кеша ресурсов. Моя основная проблема заключается в том, что между тестами кэш ресурсов становится пустым. Таким образом, первый тест, который проверяет кэш, проходит, а второй - не пройден, потому что данных, которые первый тест вставил в кеш, больше нет. Чтобы решить эту проблему, мне пришлось заново вставить данные для второго теста. Это задумано или я что-то не так делаю? Вот код Последние 2 теста - вот где проблема.


#include "UnitTestIncludes.hpp"
#include "ResourceCache.hpp"
#include &#60SFML/Graphics.hpp&#62

struct ResourceCacheFixture
{
    ResourceCacheFixture()
    {
        BOOST_TEST_MESSAGE("Setup Fixture...");
        key = "graysqr";
        imgpath = "../images/graysqr.png";
    }

    ResourceCache&#60sf::Image, ImageGenerator&#62 imgCache;
    std::string key;
    std::string imgpath;
};

// Start of Test Suite

BOOST_FIXTURE_TEST_SUITE(ResourceCacheTestSuite, ResourceCacheFixture)

// Start of tests

BOOST_AUTO_TEST_CASE(ImageGeneratorTest)
{
    ImageGenerator imgGen;
    BOOST_REQUIRE(imgGen("../images/graysqr.png"));

}

BOOST_AUTO_TEST_CASE(FontGeneratorTest)
{
    FontGenerator fntGen;
    BOOST_REQUIRE(fntGen("../fonts/arial.ttf"));
}

// This is where the issue is.  The data inserted in this test is lost for when I do
// the GetResourceTest.  It is fixed here by reinserting the data.
BOOST_AUTO_TEST_CASE(LoadResourceTest)
{
    bool result = imgCache.load_resource(key, imgpath);
    BOOST_REQUIRE(result);
}

BOOST_AUTO_TEST_CASE(GetResourceTest)
{
    imgCache.load_resource(key, imgpath);
    BOOST_REQUIRE(imgCache.get_resource(key));
}

// End of Tests

// End of Test Suite
BOOST_AUTO_TEST_SUITE_END()

1 Ответ

7 голосов
/ 22 декабря 2009

предназначен. Один из ключевых принципов модульного тестирования заключается в том, что каждый тест выполняется в изоляции . Необходимо обеспечить чистую среду, в которой можно работать, и эту среду следует снова очистить, чтобы тесты не зависели друг от друга.

С помощью Boost.Test вы можете указать, какие тесты запускать из командной строки, поэтому вам не придется запускать весь пакет. Если ваши тесты зависят друг от друга или от порядка их выполнения, это может привести к сбою тестов.

Светильники предназначены для настройки среды, необходимой для запуска теста. Если вам нужно создать ресурсы перед запуском теста, прибор должен их создать, а затем снова очистить.

...