我想爲我們的項目單元測試環境。但我失去了如何爲班級成員製造嘲笑。我想用一個例子來解釋我的問題。如何嘲笑成員對象在C++
在我的舊項目,我們用的是模擬的選擇機制,在我看來是非常難看。下面是年長的方法:
class member {
};
class member_mock_1 {
};
class member_mock_2 {
};
class parent {
#if defined UNIT_TEST_1
typedef member_t member_mock_1;
#elif defined UNIT_TEST_2
typedef member_t member_mock_2;
#else
typedef member_t member;
#endif
private:
member_t mem;
};
的第一個問題是嘲笑的成員對象的類與或縮小父類的typedefing是一個適當的方式或不?最佳做法是什麼?如果我想使用的單元測試框架,像GTEST,我應該用這種方式還是有另一種方式來嘲弄的成員?
注1:如果虛擬機制被激活,它是確定創建基類來緩解嘲諷,如果一個類是豆莢類的東西,我不想使用此機制。
注2:我也覺得醜傳遞類型的成員作爲模板參數,一切都變得項目模板。我不想這樣做。下面是一個例子:
template <typename M>
class parent {
private:
M mem;
};
#if defined UNIT_TEST_1
typedef parent_t parent<member_mock_1>;
#elif defined UNIT_TEST_2
typedef parent_t parent<member_mock_2>;
#else
typedef parent_t parent<member>;
#endif
這裏是方法我建議這裏:
member_mock_1.hpp
class member_mock_1 {
};
member_mock_2.hpp
class member_mock_2 {
};
mock.hpp
template <typename TYPE>
struct mock { using type = TYPE; };
#define ENABLE_MOCKING(NamE) \
using NamE ## _t = mock<NamE>::type
member_mock.hpp
#if define UNIT_TEST_1
template<>
struct mock<member> { using type = member_mock_1 };
#endif
#if define UNIT_TEST_2
template<>
struct mock<member> { using type = member_mock_2 };
#endif
member.hpp
class member {
};
ENABLE_MOCKING(member);
parent.hpp我上面正常類作品都提到
class parent {
private:
member_t mem;
};
方法。對於模板類,我認爲應該完成一些額外的工作。
因此,作爲一個結論,我建議像上面的單元測試的結構。可能是不必要的,還有其他一些機制或方法可以滿足這一要求。也許我還是重新發明輪子:(
請建議您知道嘲諷類成員的方式
感謝