2014-01-17 50 views
1

我是TDD新手,遇到問題。據我所知,在生產代碼準備就緒之前,TDD中的所有測試都應該失敗。我已經開發了下面的代碼:TDD:如何創建測試初始值的測試

汽車接口:

public interface CarOperations{ 

/** 
* Return current car speed in km/h 
*/ 
public int currentSpeed(); 

} 

汽車類:

public class Car implements CarOperations{ 

@Override 
public int currentSpeed() { 
    // TODO Auto-generated method stub 
    return 0; 
}} 

JUnit測試:

@Test 
public void testInitSpeed() { 
    Car car = new Car(); 

    assertEquals(0, car.currentSpeed()); 
} 

因此,我希望這個測試將失敗,因爲在我開發任何生產代碼之前,每個TDD測試都應該失敗,但是由於int默認值是這樣的測試會通過。我可以將方法的返回類型更改爲Integer並接收NULL值,但是我想知道在這種情況下如何處理基元?也許我的測試是錯誤的?

+0

相關:http://programmers.stackexchange.com/questions/224365/in-tdd-is-it-bad-practice-to-pass-a-test-with-code-that-would-pass-more - 對 - 在我看來,這樣一個小事件不是問題 – assylias

回答

3

我不認爲這樣一個微不足道的情況是一個問題,因爲很明顯如果你不返回0測試將會失敗。現在,如果您想確認測試可能失敗,您可以使用return -1;

+1

我知道這不是真正的問題而是學術討論,但是當我將返回值更改爲-1時,是否意味着我開始編寫產品代碼?因爲首先我應該寫一個測試.. – woytech

+1

我不知道學術答案,我只處理真正的問題! ;-) – assylias

+0

@woytech或者像其他人提出的那樣:'拋出新的UnsupportedOperationException();' – assylias

0

而不是返回默認值(原語或不原語),你可以拋出一個異常(例如NotImplementedException)。那樣,你的測試總是會失敗。

1

實際上,當你先寫測試時,不應該定義一個類或屬性。這意味着應用程序無法編譯,因爲測試失敗。然後你只是不要將初始值分配給這些字段,並且測試將再次失敗。

P.S:測試類型的默認值(0代表int,例如null代表String等)是沒有意義的。

+0

關於你的PS我同意這樣一個簡單的例子,但如果類變得不那麼簡單,那麼測試默認值是0(即,如果使用默認構造函數,變量不會被初始化)是可以的。 – assylias