我在讀關於TDD的內容,想知道是否可以編寫任何模擬對象而不使用像easyMock這樣的額外測試庫。模擬對象C++
比如我有代碼:
class Person
{
int age;
int add (int x) { return this.age + x }
}
如何編寫模擬對象來測試上面的代碼?
我在讀關於TDD的內容,想知道是否可以編寫任何模擬對象而不使用像easyMock這樣的額外測試庫。模擬對象C++
比如我有代碼:
class Person
{
int age;
int add (int x) { return this.age + x }
}
如何編寫模擬對象來測試上面的代碼?
你不用像mock那樣測試類。您測試接口。事實上,你的代碼看起來像是一個模擬對象來測試其他代碼。
// defined in code that is being tested
class Person {
virtual int add(int) = 0;
}
void foo(const Person& bar) {
// use person somehow
}
要測試上述接口,您可以創建一個模擬對象。這個對象沒有真正的實現可能具有的要求。例如,當真正的實現可能需要數據庫連接時,模擬對象不會。
class Mock: public Person {
int add(int x) {
// do something less complex than real implementation would
return x;
}
}
Mock test;
foo(test);
如果您想測試一個模板函數,則不需要使用繼承。
template<class T>
void foo(T bar) {
// Code that uses T.add()
}
爲了測試這樣的界面,你可以定義模擬對象這樣
class Mock {
int add(int x) {
// do something less complex than real implementation would
return x;
}
}
這就是我需要理解的。謝謝。 – Radek
當您在代碼中使用外部資源時(例如數據庫,文件等),Mocking非常有用。要做到這一點,你需要以這樣的方式實現這些接口,以便「僞裝」所需的步驟,以便可以測試實際測試的代碼(業務邏輯),而不必擔心由於外部資源中的情況。
您發佈的代碼不需要模擬來測試它。
你想在這裏嘲笑什麼?我認爲測試在這種情況下是直截了當的,並且根本不需要嘲弄 – Pradheep