我正在使用聚合初始化程序为单元测试设置一个静态数据块.
我想使用数组大小作为预期的元素数量,但如果提供的初始化程序太少,则可能会失败:
my_struct_type expected[14] =
{
{ 1.234, 0, 'c' },
{ 3.141, 1, 'z' },
{ 2.718, 0, 'a' }
};
Run Code Online (Sandbox Code Playgroud)
这在Visual Studio 2008中没有给出编译器错误.
我希望能够这样使用它:
const unsigned expected_size = sizeof(expected) / sizeof(my_struct_type);
BOOST_CHECK_EQUAL(points.size(), expected_size);
for( int i = 0; i < expected_size; i++ )
{
BOOST_CHECK_EQUAL(points[i].value, expected[i].value);
BOOST_CHECK_EQUAL(points[i].count, expected[i].count);
BOOST_CHECK_EQUAL(points[i].sym, expected[i].sym);
}
Run Code Online (Sandbox Code Playgroud)
但是因为我没有14点的编译时保证,所以它在所提供值的数组末尾和默认初始值之间运行.
我可以在编译时以某种方式强制执行聚合数组初始值设定项的数量吗?
我知道默认情况下报告是针对标准错误的,因此必须将其重定向到文件.我的问题是我们是否应该在全球范围内进行此操作?这对我来说似乎并没有起作用.
这是我试过的 -
struct MyConfig
{
MyConfig()
: testReport("fileName.log")
{
if(!testReport.fail())
original = std::cerr.rdbuf(testReport.rdbuf());
}
~MyConfig()
{
cerr.rdbuf(original);
testReport.close();
}
ofstream testReport;
streambuf* original;
};
BOOST_GLOBAL_FIXTURE(MyConfig);
Run Code Online (Sandbox Code Playgroud)
运行测试后,仅在控制台上报告输出,尽管使用给定名称创建了0kb文件.
我正在尝试使用升压测试,特别是升压单元测试.
我显然不明白主要函数是如何生成和调用的,所有教程都说是定义一个模块并编写一个测试
#define BOOST_TEST_MODULE EnfTraderTest
BOOST_AUTO_TEST_CASE(CalculateExpectedPriceTest){BOOST_ERROR("Oops");}
但是,我怎么说我的程序运行这个测试?我已经有了main函数,我想从我的main函数决定是否运行测试.
我在构建一个小程序时遇到问题,该程序在我的 Mac 上使用 Boost.Test 并通过 MacPorts 安装了 Boost /opt/local/lib/
这是我的最小源文件,test.cpp:
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(test1) {
}
Run Code Online (Sandbox Code Playgroud)
和我的CMakeLists.txt:
cmake_minimum_required(VERSION 2.6)
project (test)
find_package(Boost COMPONENTS unit_test_framework REQUIRED)
add_executable(test test.cpp)
Run Code Online (Sandbox Code Playgroud)
和摘录自make VERBOSE=1:
[100%] Building CXX object CMakeFiles/test.dir/test.cpp.o
g++ -o CMakeFiles/test.dir/test.cpp.o -c /Users/exclipy/Code/cpp/inline_variant/question/test.cpp
Linking CXX executable test
"/Applications/CMake 2.8-5.app/Contents/bin/cmake" -E cmake_link_script CMakeFiles/test.dir/link.txt --verbose=1
g++ -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/test.dir/test.cpp.o-o test
Undefined symbols for architecture x86_64:
"_main", referenced from:
start in crt1.10.6.o
"vtable for boost::unit_test::unit_test_log_t", referenced from:
boost::unit_test::unit_test_log_t::unit_test_log_t() in …Run Code Online (Sandbox Code Playgroud) 我有一个使用的增强测试用例BOOST_CHECK*,因此失败不会立即停止测试.但是在某些时候,如果到目前为止发生任何测试失败,我想停止,因为如果完整性检查失败,测试的其余部分是没有意义的吗?例如:
BOOST_AUTO_TEST_CASE(test_something) {
Foo foo;
BOOST_CHECK(foo.is_initialized());
BOOST_CHECK(foo.is_ready());
BOOST_CHECK(foo.is_connected());
// ...
// I want something like this:
BOOST_REQUIRE_CHECKS_HAVE_PASSED();
foo.do_something();
BOOST_CHECK(foo.is_successful());
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Boost.Test 进行单元测试,目前正在单独的线程中运行各种模拟服务器,这些线程从每个测试中启动。为了更准确地测试我的代码,模拟服务器实际上应该位于单独的进程中。
我正在考虑按照这些思路做一些事情:
MY_TEST()
if (fork() == 0) {
runMockServer(); // responds to test requests or times out, then returns
exit(0);
}
// Connect to MockServ and Run actual test here
END_TEST()
Run Code Online (Sandbox Code Playgroud)
但我担心这会搞砸测试框架。
这安全吗?有人做过这样的事吗?
如果重要的话,我在 Ubuntu 8.04 上使用 Boost 1.34.1。
我有一个Visual Studio项目,我想做一些单元测试Boost.Test.
我有2个文件:
档案1:
#define BOOST_TEST_MODULE FileX
#include <boost/test/unit_test.hpp>
#include <stdio.h>
BOOST_AUTO_TEST_SUITE(test_suite_name)
BOOST_AUTO_TEST_CASE(TestFileX)
{
BOOST_CHECK(true);
}
BOOST_AUTO_TEST_SUITE_END()
Run Code Online (Sandbox Code Playgroud)
和文件2:
#define BOOST_TEST_MODULE XContainer
#include <boost/test/unit_test.hpp>
#include <stdio.h>
BOOST_AUTO_TEST_SUITE(test_suite_name2)
BOOST_AUTO_TEST_CASE(TestXContainer)
{
BOOST_CHECK(true);
}
BOOST_AUTO_TEST_SUITE_END()
Run Code Online (Sandbox Code Playgroud)
当我编译项目时,我得到一个链接错误,说明main已经定义.我注意到该main文件已定义unit_test.hpp但我需要将其包含在测试宏中.
我应该如何在2个单独的文件中添加2个测试用例?
我只是安装boost 1.62并运行Boost单元测试选件,--log_sink=output.xml但出现错误。
这是我的命令行
./App --log_level=test_suite --log_format=JUNIT --log_sink=output.xml
Run Code Online (Sandbox Code Playgroud)
我从boost得到这个错误信息
test setup error: Access with invalid type for argument corresponding to parameter log_sink
Run Code Online (Sandbox Code Playgroud)
我已经进行了单元测试,boost 1.56没有错误,--log_sink我也不知道为什么会发生boost 1.62
我正在尝试在Visual Studio 2010中编译琐碎的单元测试项目.我有一个testrunner.cpp:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE "BaumWelch Unit Tests"
#include <boost/test/unit_test.hpp>
Run Code Online (Sandbox Code Playgroud)
和exampletests.cpp
#include <boost/test/unit_test.hpp>
int add( int i, int j ) { return i+j; }
BOOST_AUTO_TEST_CASE( my_test )
{
// seven ways to detect and report the same error:
BOOST_CHECK( add( 2,2 ) == 4 ); // #1 continues on error
BOOST_REQUIRE( add( 2,2 ) == 4 ); // #2 throws on error
if( add( 2,2 ) != 4 )
BOOST_ERROR( "Ouch..." ); // #3 continues on error
if( …Run Code Online (Sandbox Code Playgroud) BOOST_CHECK_CLOSE的版本是否与绝对差异有效而不是百分比?在某些情况下,绝对差异更有意义,例如当我们使用金钱时(是的,我知道双重不是最好的类型),我们可能会检查答案对最近的便士是否合适.还有很多其他的例子.
使用例如BOOST_CHECK_SMALL自己编写其中一个是相当简单的,但是右边宏的详细输出会使错误更容易追踪.
由于某种原因boost::test无法编译以下代码
#define BOOST_TEST_MODULE EPUTests
#include <iostream>
#include <boost/test/unit_test.hpp>
using epu8 = uint8_t __attribute__((vector_size(16)));
std::ostream &operator<<(std::ostream &stream, epu8 const &term) {
stream << "[" << unsigned(term[0]);
for (unsigned i = 1; i < 16; ++i)
stream << "," << unsigned(term[i]);
stream << "]";
return stream;
}
bool failtest(epu8 x) { return false; }
//****************************************************************************//
BOOST_AUTO_TEST_SUITE(EPU8_test)
BOOST_AUTO_TEST_CASE(EPU8_equal) {
epu8 x {};
BOOST_CHECK_PREDICATE(failtest, (x));
}
BOOST_AUTO_TEST_SUITE_END()
//****************************************************************************//
Run Code Online (Sandbox Code Playgroud)
错误信息是
In file included from /usr/include/boost/test/tools/floating_point_comparison.hpp:21:0,
from /usr/include/boost/test/tools/old/impl.hpp:21,
from /usr/include/boost/test/test_tools.hpp:46,
from /usr/include/boost/test/unit_test.hpp:18,
from boost_test_epu.cpp:4: …Run Code Online (Sandbox Code Playgroud)