protobuf测试用例

安装好protobuf后,需要进行测试。

可以看这篇博客

首先,搞一个测试文件.protoc格式,会需要一个protoc 编译后生成.cc 和.h 文件。

protoc 的安装版本要高于或等于protocbuf 的版本。(我这里踩了一天的坑)

生成测试文件的命令为:

 protoc -I=./protobufdemo --cpp_out=./protobufdemo ./protobufdemo/*.proto(protobufdemo自己定义的文件夹,在此文件夹的上一层目录里运行此命令)

其次,分别创建两个cpp文件,一个文件负责写,一个文件负责读。

writeprotobuf.cpp文件,向文件中写入AddressBook信息,该文件是二进制的。

#include <iostream>
#include <fstream>
#include <string>
#include "addressbook.pb.h"
using namespace std;

void PromptForAddress(tutorial::Persion *persion) {
    cout << "Enter persion name:" << endl;
    string name;
    cin >> name;
    persion->set_name(name);

    int age;
    cin >> age;
    persion->set_age(age);
}

int main(int argc, char **argv) {
    //GOOGLE_PROTOBUF_VERIFY_VERSION;

    if (argc != 2) {
        cerr << "Usage: " << argv[0] << " ADDRESS_BOOL_FILE" << endl;
        return -1;
    }

    tutorial::AddressBook address_book;
    {
        fstream input(argv[1], ios::in | ios::binary);
        if (!input) {
            cout << argv[1] << ": File not found. Creating a new file." << endl;
        }
        else if (!address_book.ParseFromIstream(&input)) {
            cerr << "Filed to parse address book." << endl;
            return -1;
        }
    }

    // Add an address
    PromptForAddress(address_book.add_persion());
    {
        fstream output(argv[1], ios::out | ios::trunc | ios::binary);
        if (!address_book.SerializeToOstream(&output)) {
            cerr << "Failed to write address book." << endl;
            return -1;
        }
    }

    // Optional: Delete all global objects allocated by libprotobuf.
    //google::protobuf::ShutdownProtobufLibrary();

    return 0;
}

编译命令如下:

g++ /home/wg/CLionProjects/untitled/address.pb.cc writeprotobuf.cpp -o write `pkg-config --cflags --libs protobuf`

readprotobuf.cpp 的内容如下:从文件中读出AddressBook信息并打印

#include <iostream>
#include <fstream>
#include <string>
#include "addressbook.pb.h"

using namespace std;

void ListPeople(const tutorial::AddressBook& address_book) {
    for (int i = 0; i < address_book.persion_size(); i++) {
        const tutorial::Persion& persion = address_book.persion(i);

        cout << persion.name() << " " << persion.age() << endl;
    }
}

int main(int argc, char **argv) {
    //GOOGLE_PROTOBUF_VERIFY_VERSION;

    if (argc != 2) {
        cerr << "Usage: " << argv[0] << " ADDRESS_BOOL_FILE" << endl;
        return -1;
    }

    tutorial::AddressBook address_book;

    {
        fstream input(argv[1], ios::in | ios::binary);
        if (!address_book.ParseFromIstream(&input)) {
            cerr << "Filed to parse address book." << endl;
            return -1;
        }
        input.close();
    }

    ListPeople(address_book);

    // Optional: Delete all global objects allocated by libprotobuf.
    //google::protobuf::ShutdownProtobufLibrary();

    return 0;
}

编译命令如下:

g++ /home/wg/CLionProjects/untitled/address.pb.cc readprotobuf.cpp -o read `pkg-config --cflags --libs protobuf`

最后测试阶段:分别开启两个终端,一个运行./ write log0

log0: File not found. Creating a new file.
Enter persion name:
wanggang

输入值进行测试。

另一个运行./read log0

读取protobuf 转换过来的信息:

wanggang 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值