I tried to merge unittest into my server project which based on GRPC. I use Google Test as the unittest library. Hope this article can give you merge Google Test into your exist project.
Google Test
compile Google Test samples
1 2 3 4 5
git clone https://github.com/google/googletest.git cd googletest/googletest cmake -Dgtest_build_samples=ON ./ make ls samples
You can read samples in googletest/googletest/samples to be familiar with Google Test
# A sample Makefile for building Google Test and using it in user # tests. Please tweak it to suit your environment and project. You # may want to move it to your project's root directory. # # SYNOPSIS: # # make [all] - makes everything. # make TARGET - makes the given target. # make clean - removes all files generated by make.
# Please tweak the following variable definitions as needed by your # project, except GTEST_HEADERS, which you can use in your own targets # but shouldn't modify.
# Points to the root of Google Test, relative to where this file is. # Remember to tweak this if you move this file. GTEST_DIR = ..
# Where to find user code. USER_DIR = ../samples
# Flags passed to the preprocessor. # Set Google Test's header directory as a system directory, such that # the compiler doesn't generate warnings in Google Test headers. CPPFLAGS += -isystem $(GTEST_DIR)/include
# Flags passed to the C++ compiler. CXXFLAGS += -g -Wall -Wextra -pthread
# All tests produced by this Makefile. Remember to add new tests you # created to the list. TESTS = sample1_unittest
# All Google Test headers. Usually you shouldn't change this # definition. GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \ $(GTEST_DIR)/include/gtest/internal/*.h
# House-keeping build targets.
all : $(TESTS)
clean : rm -f $(TESTS) gtest.a gtest_main.a *.o
# Builds gtest.a and gtest_main.a.
# Usually you shouldn't tweak such internal variables, indicated by a # trailing _. GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
# For simplicity and to avoid depending on Google Test's # implementation details, the dependencies specified below are # conservative and not optimized. This is fine as Google Test # compiles fast and for ordinary users its source rarely changes. gtest-all.o : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ $(GTEST_DIR)/src/gtest-all.cc
using grpc::Channel; using grpc::ClientContext; using grpc::Status; using grpc::ClientReader; using helloworld::Inf; using helloworld::Greeter; using helloworld::User_detail; using helloworld::Reply_inf; using helloworld::Repeated_string; using helloworld::Search_result; using helloworld::Login_m; using helloworld::Sign_m;
using namespace std;
class GreeterClient { public: GreeterClient(std::shared_ptr<Channel> channel) : stub_(Greeter::NewStub(channel)) {}
// Assambles the client's payload, sends it and presents the response back // from the server. User_detail Test_User_inf(Inf request); Reply_inf Test_Login(Login_m request);
private: std::unique_ptr<Greeter::Stub> stub_; };
User_detail GreeterClient::Test_User_inf(Inf request) { ClientContext context; User_detail reply; Status status = stub_->User_inf(&context, request, &reply); return reply; }
Reply_inf GreeterClient::Test_Login(Login_m request) { ClientContext context; Reply_inf reply; Status status = stub_->Login(&context, request, &reply); return reply; }
# Points to the root of Google Test, relative to where this file is. # Remember to tweak this if you move this file. GTEST_DIR = /home/ubuntu/Program/third_part_library/googletest/googletest
# Where to find user code. USER_DIR = .
# Flags passed to the preprocessor. # Set Google Test's header directory as a system directory, such that # the compiler doesn't generate warnings in Google Test headers. CPPFLAGS += -isystem $(GTEST_DIR)/include
# Flags passed to the C++ compiler. CXXFLAGS += -std=c++11 -g -Wall -Wextra -pthread
# All tests produced by this Makefile. Remember to add new tests you # created to the list. TESTS = user_unittest
# All Google Test headers. Usually you shouldn't change this # definition. GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \ $(GTEST_DIR)/include/gtest/internal/*.h
# House-keeping build targets.
all : $(TESTS)
clean : rm -f $(TESTS) gtest.a gtest_main.a *.o
# Builds gtest.a and gtest_main.a.
# Usually you shouldn't tweak such internal variables, indicated by a # trailing _. GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
# For simplicity and to avoid depending on Google Test's # implementation details, the dependencies specified below are # conservative and not optimized. This is fine as Google Test # compiles fast and for ordinary users its source rarely changes. gtest-all.o : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ $(GTEST_DIR)/src/gtest-all.cc