我正在尝试创建包含boost序列化和反序列化的单元测试。
我遇到了有关此内容中版本价值的一些问题:
class Object
{
public:
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(m_value1);
if (version >= 2)
{
ar & BOOST_SERIALIZATION_NVP(m_value2);
}
};
BOOST_CLASS_VERSION(Object, 2)
单元测试中的代码:
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/export.hpp>
#include <boost/serialization/version.hpp>
SUITE(ObjectTest)
{
TEST_FIXTURE(ObjectTestFixture, testSerialize)
{
std::stringstream serialisationStream;
boost::archive::xml_oarchive outputArchive(serialisationStream);
outputArchive << boost::serialization::make_nvp("Object",object);
boost::archive::xml_iarchive inputArchive(serialisationStream);
Object deserialized;
inputArchive >> boost::serialization::make_nvp("Object", deserialized);
当我进行调试时,我注意到版本号始终是&#39; 0&#39;。在这个内容中。
在正常执行期间(当对象序列化为文件然后读取时)版本值是正确的。
所以,当我检查价值&#39; m_value2&#39;在单元测试内容中,对象和反序列化对象之间的值永远不会相等,因为&#39; m_value2&#39;部分总是被跳过。
我不知道版本号何时以及如何添加到流中,我在单元测试期间使用与正常执行中相同的方法。
Name : outputArchive2
Details:{<boost::archive::xml_oarchive_impl<boost::archive::xml_oarchive>> = {<boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >> = {os = @0xbfffc988, flags_saver = {s_save_ = @0xbfffc9b4, a_save_ = 4098}, precision_saver = {s_save_ = @0xbfffc9b4, a_save_ = 6}, archive_locale = {px = 0x90331e0}, locale_saver = {<boost::noncopyable_::noncopyable> = {<No data fields>}, s_save_ = @0xbfffc98c, a_save_ = {static none = 0, static ctype = 1, static numeric = 2, static collate = 4, static time = 8, static monetary = 16, static messages = 32, static all = 63, _M_impl = 0xb70ed1b4, static _S_classic = <optimized out>, static _S_global = <optimized out>, static _S_categories = <optimized out>, static _S_once = <optimized out>}}}, <boost::archive::basic_xml_oarchive<boost::archive::xml_oarchive>> = {<boost::archive::detail::common_oarchive<boost::archive::xml_oarchive>> = {<boost::archive::detail::basic_oarchive> = {<No data fields>}, <boost::archive::detail::interface_oarchive<boost::archive::xml_oarchive>> = {<No data fields>}, <No data fields>}, depth = 0, indent_next = true, pending_preamble = false}, <No data fields>}, <No data fields>}
Default:{...}
Decimal:{...}
Hex:{...}
Binary:{...}
Octal:{...}