Google Mock使用:做一个最简单的GMock例子并运行起来(耗时约3小时)
1. 生产代码:Hello.h, SayHello.h
[root@localhost HelloGMock]# cat Hello.h
#ifndef __HELLO_
#define __HELLO_
class Hello {
public:
virtual void Hi() = 0;
};
#endif
[root@localhost HelloGMock]# cat SayHello.h
#include "Hello.h"
class SayHello {
public:
SayHello(Hello *h) { hello = h; }
//SetIt(Hello *h) { hello = h; )
void SayIt() { hello->Hi(); }
private:
Hello * hello;
};
2. 测试代码:SayHelloTest.cpp MockHello.h
[root@localhost HelloGMock]# cat MockHello.h
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "Hello.h"
class MockHello : public Hello {
public:
MOCK_METHOD0(Hi, void());
};
[root@localhost HelloGMock]# cat SayHelloTest.cpp
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "MockHello.h"
#include "SayHello.h"
TEST(SayHelloTest, test) {
//MockHello * hello = new MockHello;
MockHello hello;
EXPECT_CALL(hello, Hi()).Times(2);
SayHello * sh = new SayHello(&hello);
sh -> SayIt();
}
3. Makefile
# Builds a sample test.
TEST_SRC = $(USER_DIR)/SayHelloTest.cpp $(USER_DIR)/Hello.h $(USER_DIR)/MockHello.h $(USER_DIR)/SayHello.h
SayHelloTest.o : $(TEST_SRC) $(GMOCK_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_SRC)
HelloGMock : SayHelloTest.o gmock_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
4. 运行结果
[root@localhost HelloGMock]# make
g++ -I../../gtest/include -I../../include -g -Wall -Wextra -c ./SayHelloTest.cpp ./Hello.h ./MockHello.h ./SayHello.h
./Hello.h:4: 警告:‘class Hello’ 有虚函数却没有虚析构函数
./MockHello.h:6: 警告:‘class MockHello’ 有虚函数却没有虚析构函数
./Hello.h:4: 警告:‘class Hello’ 有虚函数却没有虚析构函数
./Hello.h:4: 警告:‘class Hello’ 有虚函数却没有虚析构函数
./MockHello.h:6: 警告:‘class MockHello’ 有虚函数却没有虚析构函数
g++ -I../../gtest/include -I../../include -I../../gtest -I../.. -g -Wall -Wextra /
-c ../../src/gmock-all.cc
g++ -I../../gtest/include -I../../include -I../../gtest -I../.. -g -Wall -Wextra /
-c ../../gtest/src/gtest-all.cc
g++ -I../../gtest/include -I../../include -I../../gtest -I../.. -g -Wall -Wextra /
-c ../../src/gmock_main.cc
ar rv gmock_main.a gmock-all.o gtest-all.o gmock_main.o
r - gmock-all.o
r - gtest-all.o
r - gmock_main.o
g++ -I../../gtest/include -I../../include -g -Wall -Wextra -lpthread SayHelloTest.o gmock_main.a -o HelloGMock
[root@localhost HelloGMock]# ./HelloGMock
Running main() from gmock_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from SayHelloTest
[ RUN ] SayHelloTest.test
[ OK ] SayHelloTest.test (0 ms)
[----------] 1 test from SayHelloTest (2 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (8 ms total)
[ PASSED ] 1 test.
5. 调试过程问题总结
* Hello.h:6: 错误:ISO C++ 不允许声明无类型的 ‘virutal’
拼写错误,应该为"virtual"
* 误拼"}"为")"
[root@localhost HelloGMock]# vi SayHello.cpp
#include "Hello.h"
class SayHello {
public:
SayHello(Hello *h) { hello = h;)
void SayIt() { hello->hi(); }
private:
Hello * hello;
};
~
[root@localhost HelloGMock]# g++ SayHello.cpp Hello.h
SayHello.cpp:9: 错误:expected `}' at end of input
SayHello.cpp: In constructor ‘SayHello::SayHello(Hello*)’:
SayHello.cpp:5: 错误:‘hello’ 在此作用域中尚未声明
SayHello.cpp:5: 错误:expected primary-expression before ‘)’ token
SayHello.cpp:5: 错误:expected `;' before ‘)’ token
SayHello.cpp:7: 错误:expected primary-expression before ‘private’
SayHello.cpp:7: 错误:expected `;' before ‘private’
SayHello.cpp: At global scope:
SayHello.cpp:9: 错误:expected unqualified-id at end of input
原因:'}'误拼为')'了。
* 错误:‘class Hello’ 重定义
加上
#ifndef __HELLO_
#define __HELLO_
1670



被折叠的 条评论
为什么被折叠?



