Google Mock - usando ::testing::An()
-
15-11-2019 - |
Pergunta
Recebo um erro de compilação ao usar o seguinte Simulação do Google declaração:
EXPECT_CALL(some_object, someFunction(1,An<AStructIDefined>()))
.Times(2);
O erro é:
1>ClCompile:
1> TestMyClass.cpp
1>TestMyClass.cpp(189): error C2664: 'mynamespace::MockMyClassClient::gmock_someFunction' : cannot convert parameter 2 from 'testing::Matcher<T>' to 'const testing::Matcher<T> &'
1> with
1> [
1> T=mynamespace::AStructIDefined
1> ]
1> and
1> [
1> T=const mynamespace::AStructIDefined &
1> ]
1> Reason: cannot convert from 'testing::Matcher<T>' to 'const testing::Matcher<T>'
1> with
1> [
1> T=mynamespace::AStructIDefined
1> ]
1> and
1> [
1> T=const mynamespace::AStructIDefined &
1> ]
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
O que estou fazendo de errado?
ATUALIZAÇÕES:
Estou usando o VS2010.
A declaração de someFunction é:
virtual void someFunction( long long ll, const AStructIDefined& a_struct);
An() é uma simulação do Google correspondente de curinga com a seguinte definição:
// Creates a matcher that matches any value of the given type T.
template <typename T>
inline Matcher<T> An() { return A<T>(); }
Uma versão simplificada, mas representativa, da estrutura é:
namespace mynamespace {
class ABaseCLass
{
public:
virtual ~ABaseCLass(){};
virtual bool isValid() const = 0;
};
struct AStructIDefined : public ABaseCLass
{
public:
OrderStatusReport(SomeEnum1 e_, int i_, double d_);
SomeEnum1 e;
int i;
double d;
const std::string toString() const;
bool isSane() const;
bool operator== (const SomeEnum1& ref_) const;
double getD() const;
int getI() const;
bool isCondition() const;
};
} // namespace mynamespace
Solução
A solução foi alterar a declaração de:
EXPECT_CALL(some_object, someFunction(1,An<AStructIDefined>()))
.Times(2);
para
EXPECT_CALL(some_object, someFunction(1,An<const AStructIDefined &>()))
.Times(2);
C++ lança implicitamente const
e referência &
nos parâmetros de função, mas a declaração do Google mock parece exigir que o tipo que aparece na assinatura da função e não o tipo enviado como parâmetro para a função.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow