man*_*anu 7 c++ serialization boost boost-serialization
我正在尝试使用 boost 运行单元测试,但当我运行测试时它给了我错误 - > “未知位置(0):“MyCheckTest”中的致命错误:”
错误甚至没有提到测试失败的行。我无法弄清楚,因此共享代码:
// 函数.hpp
#pragma once
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/access.hpp>
#include <boost/smart_ptr/make_shared.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/export.hpp>
struct Function
{
std::string id, name;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int /*version*/)
{
ar & id;
ar & name;
}
public:
Function(void);
typedef int parameter_strings;
Function(const parameter_strings & parms) { }
virtual ~Function(void);
};
BOOST_CLASS_EXPORT_KEY(Function);
Run Code Online (Sandbox Code Playgroud)
// 函数.cpp
#include "functions.hpp"
Function::~Function()
{
std::cout<< " destructor called \n";
}
Function::Function()
{
std::cout<<" constructor called \n";
}
BOOST_CLASS_EXPORT_IMPLEMENT(Function);
BOOST_CLASS_IMPLEMENTATION(Function, boost::serialization::object_serializable);
BOOST_CLASS_TRACKING(Function, boost::serialization::track_never);
Run Code Online (Sandbox Code Playgroud)
// maintest.cpp
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
#include "functions.hpp"
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
void set_data(Function *c1)
{
c1->id= "sheena";
c1->name="kurian";
}
void check_data(Function *m1,Function *m2)
{
BOOST_CHECK(m1->id==m2->id);
BOOST_CHECK(m1->name==m2->name);
BOOST_CHECK(m1->id.size() == m2->id.size());
BOOST_CHECK(m1->name.size() == m2->name.size());
}
BOOST_AUTO_TEST_CASE(MyCheckTest)
{
boost::archive::text_oarchive ao(std::cout);
Function c;
set_data(&c);
const Function & oc=c;
ao & oc; // serialize
std::stringstream ss;
boost::archive::text_iarchive ia(ss);
Function d;
ia >> d; // deserialize
check_data(&c,&d); // comparing data
}
Run Code Online (Sandbox Code Playgroud)
在 maintest.cpp 文件中,我尝试测试它,它给了我错误消息,如下所示:
Running 1 test case...
1> 22 serialization::archive 10 constructor called
1> 7 sheena 7 kurian destructor called
1>
1> unknown location(0): fatal error in "MyCheckTest": std::exception: invalid signature
1>
1> Test suite "Master Test Suite" failed with:
1> 1 assertion out of 1 failed
1> 1 test case out of 1 failed
1> 1 test case out of 1 aborted
Run Code Online (Sandbox Code Playgroud)
不知道为什么它会给 MyCheckTest 带来致命错误。如果有任何拼写错误或头文件丢失,请告诉我。
至少它应该给出类似于如下所示的错误:
maintest.cpp(10):“my_test”中出现错误:检查 m1->id == m2->id 失败。 在测试套件“MyCheckTest”中检测到 1 个故障