测试自动化 2011/06/11 - 1 一个最简单的GMock测试程序HelloGMock

来源:互联网 发布:数据库建模软件 编辑:程序博客网 时间:2024/06/17 11:17

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_

 

 

原创粉丝点击