我试图在类中模拟其中一个方法。 (Randomiser_MOCK.h
)
#include "../src/Randomiser.h"
#include "gmock/gmock.h"
class Randomiser_MOCK : public Randomiser {
public:
MOCK_METHOD0( getRand, unsigned long() );
MOCK_METHOD2( setPoolRange, bool( const uint64_t &range_from, const uint64_t &range_to ) );
};
相关类的头文件(Randomiser.h
)是:
class Randomiser {
public:
Randomiser();
Randomiser( const Randomiser &randomiser );
Randomiser( Randomiser &&randomiser );
bool setPoolRange( const uint64_t &range_from, const uint64_t &range_to );
unsigned long getRand();
private:
std::mt19937 _rng;
std::uniform_int_distribution<uint64_t> _distribution;
};
这有点奇怪,因为我已经将方法签名从原始方法签名复制到模拟方法声明,而getRand()
工作得很好(包括编译/运行)。 / p>
有人对此有所了解吗?
实际单元测试文件:
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "Randomiser_MOCK.h"
#include "../src/Generator.h"
#include "../src/Generator.cpp"
TEST( Generator_Tests, create ) {
Randomiser_MOCK r;
using ::testing::Return;
using ::testing::_;
ON_CALL( r, getRand() ).WillByDefault( Return( 1 ) ); //All good here
ON_CALL( r, setPoolRange(_,_) ).WillByDefault( Return( true ) );
auto generator = Generator( r, "test_file" );
generator.create();
//....
}