Customer#statement() の試験
面倒。どーゆーケイスが必要かというと
- Movie.REGULAR 一件のみ
- daysRented が 2 以下の場合と 3 以上の場合
- Movie.NEW_RELEASE 一件のみ
- daysRented が 2 以上の場合と 1 の場合
- Movie.CHIOLDRENS 一件のみ
- daysRented が 3 以下の場合と 4 以上の場合
- Movie.REGULAR 複数件
- Movie.NEW_RELEASE 複数件
- Movie.CHIOLDRENS 複数件
- Movie.REGULAR と Movie.NEW_RELEASE
- Movie.NEW_RELEASE と Movie.CHIOLDRENS
- Movie.CHIOLDRENS と Movie.REGULAR
- Movie.REGULAR と Movie.NEW_RELEASE と Movie.CHIOLDRENS
しかも文字列が戻ってくるあたりが超微妙。こーゆーケイスって一つの試験で全部 assert するのが良いのかどうか。
で
とりあえず一つ書いてみた。
@Test public void statementTest() { String result1 = "Rental Record for " + name + "\n\t" + "E.T" + "\t" + "2.0" + "\n" + "Amount owed is 2.0\n" + "You earned " + "1" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.REGULAR), 2)); assertEquals(result1, customer.statement()); }
凄く面倒。これ、テストケース分けた方が良さげ。あと branch してなかったので、
$ git checkout -b test-add
して試験追加続行。
一応できた
以下。全部貼ります。
package jp.co.lexues.study.refactoring; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class CustomerTest { private Customer customer; private final String name = "yamanetoshi"; @Before public void setUp() throws Exception { } @Test public void getNameTest() { customer = new Customer(name); assertEquals(name, customer.getName()); } @Test public void statemanet_REGULAR_one() { String result = "Rental Record for " + name + "\n\t" + "E.T" + "\t" + "2.0" + "\n" + "Amount owed is 2.0\n" + "You earned " + "1" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.REGULAR), 2)); assertEquals(result, customer.statement()); result = "Rental Record for " + name + "\n\t" + "E.T" + "\t" + "3.5" + "\n" + "Amount owed is 3.5\n" + "You earned " + "1" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.REGULAR), 3)); assertEquals(result, customer.statement()); } @Test public void statement_NEW_RELEASE_ont() { String result = "Rental Record for " + name + "\n\t" + "E.T" + "\t" + "3.0" + "\n" + "Amount owed is 3.0\n" + "You earned " + "1" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.NEW_RELEASE), 1)); assertEquals(result, customer.statement()); result = "Rental Record for " + name + "\n\t" + "E.T" + "\t" + "6.0" + "\n" + "Amount owed is 6.0\n" + "You earned " + "2" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.NEW_RELEASE), 2)); assertEquals(result, customer.statement()); } @Test public void statement_CHILDRENS_one() { String result = "Rental Record for " + name + "\n\t" + "E.T" + "\t" + "1.5" + "\n" + "Amount owed is 1.5\n" + "You earned " + "1" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.CHILDRENS), 3)); assertEquals(result, customer.statement()); result = "Rental Record for " + name + "\n\t" + "E.T" + "\t" + "3.0" + "\n" + "Amount owed is 3.0\n" + "You earned " + "1" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.CHILDRENS), 4)); assertEquals(result, customer.statement()); } @Test public void statemanet_REGULAR_multiple() { String result = "Rental Record for " + name + "\n" + "\t" + "E.T" + "\t" + "2.0" + "\n" + "\t" + "Toy Story" + "\t" + "3.5" + "\n" + "Amount owed is 5.5\n" + "You earned " + "2" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.REGULAR), 2)); customer.addRental(new Rental(new Movie("Toy Story", Movie.REGULAR), 3)); assertEquals(result, customer.statement()); } @Test public void statement_NEW_RELEASE_multiple() { String result = "Rental Record for " + name + "\n" + "\t" + "E.T" + "\t" + "3.0" + "\n" + "\t" + "Toy Story" + "\t" + "6.0" + "\n" + "Amount owed is 9.0\n" + "You earned " + "3" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.NEW_RELEASE), 1)); customer.addRental(new Rental(new Movie("Toy Story", Movie.NEW_RELEASE), 2)); assertEquals(result, customer.statement()); } @Test public void statement_CHILDRENS_multiple() { String result = "Rental Record for " + name + "\n" + "\t" + "E.T" + "\t" + "1.5" + "\n" + "\t" + "Toy Story" + "\t" + "3.0" + "\n" + "Amount owed is 4.5\n" + "You earned " + "2" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.CHILDRENS), 3)); customer.addRental(new Rental(new Movie("Toy Story", Movie.CHILDRENS), 4)); assertEquals(result, customer.statement()); } @Test public void statement_REGULAR_and_NEW_RELEASE() { String result = "Rental Record for " + name + "\n" + "\t" + "E.T" + "\t" + "3.5" + "\n" + "\t" + "Toy Story" + "\t" + "6.0" + "\n" + "Amount owed is 9.5\n" + "You earned " + "3" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.REGULAR), 3)); customer.addRental(new Rental(new Movie("Toy Story", Movie.NEW_RELEASE), 2)); assertEquals(result, customer.statement()); } @Test public void statement_NEW_RELEASE_and_CHILDRENS() { String result = "Rental Record for " + name + "\n" + "\t" + "E.T" + "\t" + "6.0" + "\n" + "\t" + "Toy Story" + "\t" + "1.5" + "\n" + "Amount owed is 7.5\n" + "You earned " + "3" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.NEW_RELEASE), 2)); customer.addRental(new Rental(new Movie("Toy Story", Movie.CHILDRENS), 2)); assertEquals(result, customer.statement()); } @Test public void statement_CHILDRENS_and_REGULAR() { String result = "Rental Record for " + name + "\n" + "\t" + "E.T" + "\t" + "1.5" + "\n" + "\t" + "Toy Story" + "\t" + "2.0" + "\n" + "Amount owed is 3.5\n" + "You earned " + "2" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.CHILDRENS), 2)); customer.addRental(new Rental(new Movie("Toy Story", Movie.REGULAR), 2)); assertEquals(result, customer.statement()); } @Test public void statement_REGULAR_and_NEW_RELEASE_and_CHILDRENS() { String result = "Rental Record for " + name + "\n" + "\t" + "E.T" + "\t" + "3.5" + "\n" + "\t" + "Toy Story" + "\t" + "6.0" + "\n" + "\t" + "Tom & Jerry" + "\t" + "1.5" + "\n" + "Amount owed is 11.0\n" + "You earned " + "4" + " frequent renter points"; customer = new Customer(name); customer.addRental(new Rental(new Movie("E.T", Movie.REGULAR), 3)); customer.addRental(new Rental(new Movie("Toy Story", Movie.NEW_RELEASE), 2)); customer.addRental(new Rental(new Movie("Tom & Jerry", Movie.CHILDRENS), 2)); assertEquals(result, customer.statement()); } }
add して commit して patch を関係方面に送付予定。