2015-04-06 116 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

相关问题