我一直在努力解决这个问题,到目前为止还无法让它发挥作用。使用 botan 的简单 main 可以正常工作,但是当我将相同的代码放在单元测试中时,它会失败。
// keygeneration_test.cpp
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp> // shuold use this one if using dynamic linking
#include <botan\botan.h>
#include <botan\rsa.h>
BOOST_AUTO_TEST_SUITE(keygeneration_suite)
BOOST_AUTO_TEST_CASE(rsa_key_generation)
{
BOOST_TEST_MESSAGE("generating key");
try
{
Botan::LibraryInitializer init;
Botan::AutoSeeded_RNG rng;
rng.reseed(10096);
Botan::RSA_PrivateKey rsaPrivate(rng, 1024);
}
catch (std::exception& e)
{
BOOST_TEST_MESSAGE(e.what());
}
}
BOOST_AUTO_TEST_SUITE_END()
--
// main.cpp
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE cryptography test //module define should be only here, it takes care of creating entry point
#include <boost/test/unit_test.hpp> // should use this one if using dynamic linking
然后我尝试将 init 放在主入口点,如下所示:
//main.cpp
#define BOOST_TEST_DYN_LINK // Make the exe link dynamically
#define BOOST_TEST_NO_MAIN
#include <boost/test/unit_test.hpp> // should use this one if using dynamic linking
#include <botan\botan.h>
bool init_function()
{
return true;
}
int main(int argc, char* argv[])
{
Botan::LibraryInitializer init;
return boost::unit_test::unit_test_main(&init_function, argc, argv);
}
它们都显示相同的错误:
运行 1 个测试用例...未知位置(0):“rsa_key_generation”中的致命错误:在地址 0x00141000 发生内存访问冲突,同时尝试读取无法访问的数据
*** 在测试套件“密码学测试”中检测到 1 个故障检测到内存泄漏!转储对象 -> {670} 位于 0x0000000000221380 的正常块,16 个字节长。数据:78 EA 13 00 00 00 00 00 00 00 00 00 00 00 00 00 对象转储完成。
仅作记录,我尝试过的简单压缩测试或我所做的任何事情都可以正常工作,但是当我尝试使用植物初始化创建测试时,无论我尝试什么都会失败。
编辑:我已经尝试过使用 Qt Test 并且发生了同样的情况。它真的很奇怪。有没有人经历过这样的事情?谁能重现这个?