2016-07-21 42 views

回答

3

你的方法set_enable的变化方案中使用的辅助方法,像这样:现在

void set_enable(bool enabled = true) { set_enable_impl(enabled); } 

,在MockA类,创建set_enable_impl一个模拟方法:

MOCK_METHOD1(set_enable_impl, void(bool)); 

然后,在您的生产代码中,您只需使用set_enable,就像您在第一个地方一样,而在测试中您可以上方法set_enable_impl n设置的期望:

MockA mockA; 
EXPECT_CALL(mockA, set_enable_impl(_))...; 

另一种方法是通过使具有1点0的参数版本重载方法。由您决定哪种方式更适合您的情况。

+0

如果没有为了测试目的而改变原始代码,情况会更好。顺便说一下,如果不会有任何其他方式,我会接受你的答案作为最好的答案。 – nyarlathotep108

+0

@ nyarlathotep108还有一个选择,但它也需要更改原始代码。看到我更新的答案。 –

+0

@ nyarlathotep108考虑如果您没有找到更好的解决方案将答案标记为已接受,或者如果您确实接受了,请与我们分享。 –

6

这是马尔科的答案的选择:如果你不想改变你的原代码,只实现了模拟类助手:

class A 
{ 
public: 
    void set_enable(bool enabled = true); 
}; 

class MockA : public A 
{ 
    MOCK_METHOD1(set_enable_impl, void(bool)); 
    virtual void set_enable(bool enabled = true) 
    { 
     set_enable_impl(enabled); 
    { 
}; 

您还必须期望在set_enable_impl呼叫您测试,例如

MockA mockA; 
EXPECT_CALL(mockA, set_enable_impl(true)).Times(Exactly(1)); 
EXPECT_CALL(mockA, set_enable_impl(false)).Times(Exactly(1)); 
+0

这应该是正确的答案。默认参数的全部目的是避免生产代码中的无关重载方法。 –

相关问题