您可以在不嘲笑的情況下演示TDD。事實上,嘲弄可能會混淆TDD新手。我會簡單地從測試中開始,嘗試開發您正在嘗試開發的功能,然後再擔心嘲笑。讓我們假設你已經測試驅動的數字爲英語轉換器(它不會出現你這樣做又根據您的描述),你有一個類,看起來是這樣的:
public class NumberConverterTest { ... }
public class NumberConverter {
public String toEnglish(int number) { ... }
}
你很可能也有一些主類:
public class NumberConverterMain {
public void main(String[] args) {
NumberConverter converter = new NumberConverter();
System.out.println(converter.toEnglish(args[0]);
}
}
你現在已經演示了TDD沒有嘲笑。在嘗試TDD時,嘲諷問題總會出現。爲了演示模擬,您可以在toEnglish
方法中添加一些任意的業務規則,例如「所有大於1000的數字請求都必須記錄到大數部門」。知道大量部門託管在另一臺我們不想依賴的服務器上,我們可以測試驅動界面並將其模擬出來。
public class NumberConverterTest {
// ..
@Test public void theLargeNumberDepartmentIsNotifiedForLargeNumbers() {
LargeNumberDepartment department = new MockLargeNumberDepartment(1000);
NumberConverter converter = new NumberConverter(department);
converter.toEnglish(1000);
assertTrue(department.wasNotifiedWith(1000));
}
public static MockLargeNumberDepartment implements LargeNumberDepartment {
private int valueRequested;
public void MockLargeNumberDepartment(int threshhold) {
this.threshold = threshold;
}
public int notificationThreshold() {
return this.threshold;
}
public void largeNumberReceived(int value) {
valueRequested = value;
}
public boolean wasNotifiedWith(int value) {
assertEquals(value, valueRequested);
return true;
}
}
}
// In NumberConverter.java
public class NumberConverter {
public NumberConverter(LargeNumberDepartment department) {
this.department = department;
}
public String toEnglish(int value) {
if(value > department.notificationThreshold())
department.largeNumberReceived(value);
return convertIt(value);
}
}
嘲笑通常用於模擬別的東西。你想要模擬什麼?輸出機制? – 2012-03-11 17:34:14
如果你想演示TDD,你應該丟掉你的代碼並開始編寫測試。 – 2012-03-11 17:45:58
@vaughan:這是我的問題。我的程序可以很容易地編寫而不用嘲笑,但是我需要用一種方式來寫作,以演示嘲笑。因此,我需要這樣設計它。設計顯然會令人費解,但這個練習是爲了展示嘲笑。 – TheCoder 2012-03-11 17:57:52