gpt4 book ai didi

c++ - 在测试之间清除 Boost Test Fixture 对象

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:38 25 4
gpt4 key购买 nike

我在 boost 单元测试方面遇到问题。基本上我创建了一个夹具,它是一个套件的一部分,用于对资源缓存进行单元测试。我的主要问题是在测试之间资源缓存变空了。因此,第一个测试缓存的测试通过,然后第二个测试将失败,因为第一个测试插入到缓存中的数据不再存在。为了解决这个问题,我不得不重新插入第二次测试的数据。这是故意的还是我做错了什么?这是代码。最后 2 个测试是问题所在。


#include "UnitTestIncludes.hpp"
#include "ResourceCache.hpp"
#include <SFML/Graphics.hpp>

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

ResourceCache<sf::Image, ImageGenerator> 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()

最佳答案

这是有意的。单元测试的关键原则之一是每个测试都独立运行。应该给它一个干净的环境来运行,然后再清理那个环境,这样测试就不会相互依赖。

使用 Boost.Test,您可以指定从命令行运行哪些测试,因此您不必运行整个套件。如果您的测试相互依赖或依赖于它们的执行顺序,那么这将导致测试失败。

夹具旨在设置运行测试所需的环境。如果您需要在测试运行之前创建资源,fixture 应该创建它们,然后再清理它们。

关于c++ - 在测试之间清除 Boost Test Fixture 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1942725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com