2015-04-06 4 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 метод. Однако для этого мне нужно создать список Book объектов в моем CheckoutTest? Кроме того, мне нужно будет проверить окончательный результат с очень длинным номером (например, 62.01997301). Не проще ли тестировать метод main(), поскольку в моем модульном тесте не будет необходимости создавать объекты Book (я буду работать только с Strings), и я могу проверить вывод с более коротким номером (как 62.01)?

+1

Просто хочу прокомментировать, вы, вероятно, не должны использовать double для хранения цен из-за присущей неточности типов с плавающей точкой. – juunas

ответ

1
  1. Однако, чтобы сделать это, я должен создать список объектов книги в моем CheckoutTest: Вообще и в любом виде - да?!

  2. Кроме того, я должен буду проверить конечный результат с некоторым очень длинным числом (например, 62.01997301): Naah, это зависит от ориентации теста/качества коды! (для «цены» 2 цифры должны быть эффективными (в любой стране !?))

  3. Не проще ли проверить метод main(), поскольку в моем модульном тесте не будет никаких нужно создать объекты книги (я буду работать только со строками), и я могу проверить вывод с более коротким числом (например, 62.01)? Определенно! Но с текущей настройкой кому-то (человеку) пришлось бы проверять консоль на «передачу этого теста», для JUnit (и программно тестировать значение) вам нужно/нужно будет сделать «getPrice() более видимым» ... или каким-то образом получить доступ к его значению.

+0

Спасибо! И если я хочу проверить несколько случаев, я должен написать несколько методов 'test()', правильно? – sammy333

+0

Звучит нормально! При тестировании это «не так важно», как вы это делаете, но «это» вы это делаете и сколько (программный) код вы покрываете. Стандартные инструменты (eclipse, netbeans, ...) имеют (были) мастера для генерации Test (Stub) - обычная настройка - это один TestClass для каждого класса, один метод testMethod per (public). Вот некоторые ссылки: 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