在以下情况下我应该如何编写 JUnit 测试?

How Should I write JUnit test in the following case?

我是单元测试的新手。 我有一个class Ckeckout,主要功能是打印书籍的支付金额。用户在命令行中输入书名,根据一些计算,我必须输出最终价格。 这里是 Book class:

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 class:

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. 但是,要这样做,我是否必须在我的 CheckoutTest 中创建 Book 对象列表?:一般来说,任何类型 - 是的!

  2. 此外,我将不得不用一些很长的数字(比如 62.01997301)来验证最终结果:Naahthis 取决于您的定位 test/code 质量! (对于 "price" 2 位数字应该足够了(在任何国家!?))

  3. 测试 main() 方法不是更容易吗,因为在我的单元测试中,不需要创建 Book 对象(我将只使用字符串)我可以用更短的数字(比如 62.01)验证输出? 肯定会!但是对于当前的设置,一些(人类)必须检查控制台是否有 "passing that test",对于 JUnit(并以编程方式测试该值),您 should/will需要使 "getPrice() more visible" ... 或以某种方式访问​​它的值。