2015-04-06 170 views
0

我是單元測試新手。 我有一個類Ckeckout,其主要功能是打印支付書籍的金額。用戶在命令行輸入圖書的標題,根據一些計算,我必須輸出最終價格。 這裏是Book類:如何在以下情況下編寫JUnit測試?

public class Book { 
    private String title; 
    private double price; 
    private int year; 

    public Book(String title, double price, int year) { 
     super(); 
     this.title = title; 
     this.price = price; 
     this.year = year; 
    } 
} 

這裏是Checkout類:

public class Checkout { 

    private List<Book> books; 

    public Checkout(List<Book> books) { 
     super(); 
     this.books = books; 
    } 

    //calculate the final price 
    private double getPrice(){ 
     //return some double 
    } 


} 

我想測試只是getPrice方法。但是,要這樣做,是否必須在我的CheckoutTest中創建Book對象列表?另外,我將不得不用最長的數字來驗證最終結果(如62.01997301)。測試main()方法並不容易,因爲在我的單元測試中,不需要創建Book對象(我只能使用Strings),並且我可以使用較短的數字驗證輸出(像62.01)?

+1

只是想評論,你可能不應該使用雙重存儲價格,因爲浮點類型固有的不準確性。 – juunas 2015-04-06 10:10:21

回答

1
  1. 然而,要做到這一點,我要在我的CheckoutTest創建圖書對象列表:一般來說,在任何一種 - ?!

  2. 而且,我將有一些很長的數字來驗證最終結果(如62.01997301):納阿取決於您的定位測試/代碼質量! (對於「價格」2位數應該是有效的(在任何國家!?))

  3. 是不是更容易,測試main()方法,因爲在我的單元測試中,不會有任何需要創建Book對象(我只能使用Strings工作),並且可以使用較短的數字驗證輸出(如62.01)? 絕對!但是對於當前的設置,一些(人類)必須檢查控制檯「通過該測試」,對於JUnit(並以編程方式測試該值),您應該/將需要使「getPrice()更明顯」。或以某種方式訪問​​其價值。

+0

謝謝!如果我想測試幾個例子,我應該寫幾個'test()'方法,對吧? – sammy333 2015-04-06 10:27:40

+0

聽起來對我好!在測試時,它是如何「不那麼重要」,但是「你」是這樣做的,以及你覆蓋多少(程序)代碼。標準工具(eclipse,netbeans,...)具有測試(存根)生成嚮導 - 正常設置是每個類一個TestClass,每個(公共)方法一個testMethod。這裏有一些鏈接:http://stackoverflow.com/questions/1894298/how-can-i-create-stub-junit-tests-in-eclipse,http://www.javaworld.com/article/2076265/testing-調試/ junit-best-practices.html ... – xerx593 2015-04-06 17:25:01

相關問題