2017-11-23 14 views
-2

この問題の助けを借りて感謝します 私はそれらのためにJunitテストを行うために必要な2つのクラスを持っています。私は最初に正しく行ったと思うが、ArrrayListを使って2番目の問題に問題がある。ファーストクラスArraylist用のJunit

顧客クラスの

ファーズクラス

package main; 

/** 
* Class that stores the following 
* 
* Customer Name: 
* Customer PPS: 
* Customer Email: 
* Customer Age: 
*/ 
public class Customer { 

    // Customer Name 
    private String name; 

    // Customer Pps Number 
    private int Pps; 

    // Customer Email 
    private String email; 

    // Customer Age 
    private int age;  


    /** 
    * Constructor that creates Customer object 
    * 
    * @param name name of Customer 
    * @param Pps numeric Pps of Customer 
    * @param email email of Customer 
    * @param age age of Customer 
    */ 
    public Customer(String name, int Pps, String email, int age) { 

     if (name==null) 
      throw new IllegalArgumentException("Name cannot be null"); 

     if (email==null) 
      throw new IllegalArgumentException("Email cannot be null"); 

     if (name.trim().length()==0) 
      throw new IllegalArgumentException("Name cannot be empty"); 

     if (Pps<=0) 
      throw new IllegalArgumentException("Not positiove Ppss are not allowed"); 

     if (age<18) 
      throw new IllegalArgumentException("Customer mush be at least 18 year old"); 

     this.name = name; 
     this.Pps = Pps;    
     this.email = email; 

     this.age = age; 
    } 

    /** 
    * Gets name of Customer 
    * 
    * @return name Customer name 
    */ 
    public String getName() { 
     return name; 
    } 

    /** 
    * Gets PPS of Customer 
    * 
    * @return Customer PPS number 
    */ 
    public int getPps() { 
     return Pps;  
    } 

    /** 
    * Gets email of Customer 
    * 
    * @return Customer Email 
    */ 
    public String getEmail() { 
     return email; 
    } 

    /** 
    * Gets age of Customer 
    * 
    * @return Customer age 
    */ 
    public int getAge() { 
     return age; 
    } 
} 

JUnitのは

顧客名が空でないクラスのインスタンスを作成する前に、次のことを確認する必要があり PPS番号ですnullでない 電子メールは空ではありません お客様の年齢は18歳を超えています

package test; 
import static org.junit.Assert.*; 

import org.junit.Before; 
import org.junit.Test; 

import main.Customer; 

public class testCustomer { 

    Customer myCustomer; 
    @Before 
    public void setUp() throws Exception { 
    myCustomer = new Customer("Name1", 2, "Name2", 18); 
    } 
    public void tearDown() throws Exception { 
    } 


    @Test 
    public void test() { 
     //fail("Not yet implemented"); 
     assertTrue("It can't be null", (myCustomer.getName() !=null)); 
     assertTrue("It can't be null", (myCustomer.getEmail() !="")); 
     assertTrue("It can't be negative number", (myCustomer.getPps() >=0)); 
     assertTrue("It can't be smaller than 18", (myCustomer.getAge() >=18)); 

    } 


} 

第二のクラス

package main; 

import java.security.InvalidParameterException; 
import java.util.ArrayList; 

/** 
* The CustomerList class can Add, Remove, 
* Find by Customer Name, Find by Customer pps, Find by Email and return the Total No. of Customers 
* 
*/ 
public class CustomerList { 
    private ArrayList<Customer> list; 


    /** 
    * Constructor of Customer list object 
    * Creates empty Customer list 
    */ 
    public CustomerList() { 
     list = new ArrayList<Customer>();  
    } 

    /** 
    * Add new Customer into list 
    * There is not allowed to have two Customers with same id 
    * 
    * @param newCustomer new Customer object 
    */ 
    public void add(Customer newCustomer) { 
     for(Customer Customer : list) 
      if (Customer.getPps()==newCustomer.getPps()) 
      { 
       throw new InvalidParameterException("Customer with this ID is already added into list"); 
      } 

     list.add(newCustomer);  
    } 

    public void remove(int id) { 
     for(Customer Customer : list) 
      if (Customer.getPps()==id) 
      { 
       list.remove(Customer); 
       return; 
      } 
    } 

    public Customer findById(int id) { 
     for(Customer Customer : list) 
      if (Customer.getPps()==id) 
      { 
       return Customer; 
      } 
     return null; 
    } 

    public Customer findByEmail(String email) { 
     for(Customer Customer : list) 
      if (Customer.getEmail().equals(email)) 
      { 
       return Customer; 
      } 
     return null; 
    } 

    public Customer findByName(String name) { 
     for(Customer Customer : list) 
      if (Customer.getName().equals(name)) 
      { 
       return Customer; 
      } 
     return null; 
    } 

    /** 
    * Gets total number of Customers 
    * 
    * @return total number of Customers 
    */ 
    public int getNumberOfCustomers() { 
     return list.size(); 
    } 
} 

第二のクラスのためのJUnit(トライアル)

CUSTOMERLISTクラスは

がで顧客名により、 検索を 検索をCustomerオブジェクトを削除し、Customerオブジェクトを追加することができますお客様のpps、 電子メールで検索 お客様の合計数を返します

package test; 

import static org.junit.Assert.*; 

import java.util.ArrayList; 
import java.util.Arrays; 

import org.junit.Before; 
import org.junit.Test; 

import main.Customer; 
import main.CustomerList; 

public class testCustomerList { 


    Customer myCustomer = new Customer("Name1", 2, "Name2", 18); 
    CustomerList myCustomerList=myCustomerList = new CustomerList(); 
    @Before 
    public void setUp() throws Exception { 
     myCustomer = new Customer("Name1", 2, "Name2", 18); 
    myCustomerList = new CustomerList(); 


    } 
    public void tearDown() throws Exception { 
    } 

    @Test 
    public void test() { 

     assertEqual(myCustomerList.add(myCustomer) myCustomerList.size(1)); 

    } 

} 
+1

ですので、[mcve]をよく読んで質問に答えてください。このサイトは、あなたの宿題と組み合わされたひどく書かれたコードを大量にダンプする場所ではなく、「すべての入力内容を確認してガイドしてください」と尋ねます。このコミュニティは無料のチューターサービスではありません!また、コンパイルエラー翻訳サービスでもありません。 – GhostCat

+0

誰もあなたに答えを求めることはありません。あなたは私を助けてくれる人たちのために話しますか? – Tom

+0

ヘルプセンターのメンバーですか?このサービスの司会者ですか? – Tom

答えて

0

あなたのテストが悪いと書かれています、あなたは1つのテストで複数のケースをテストしています。正しいコードは次のようになります。

public class CostumerTest { 
    private final static String VALID_EMAIL = "[email protected]"; 
    private final static int VALID_AGE = 42; 
    private final static int VALID_PPS = 42; 
    private final static int VALID_NAME = "Bob"; 


    @Test(expected = IllegalArgumentException.class) 
    public void shouldThrowExceptionWhenNameIsNull() { 
     Costumer costumer = new Costumer(null, VALID_PPS, VALID_EMAIL, VALID_AGE); 
    } 

    @Test(expected = IllegalArgumentException.class) 
    public void shouldThrowExceptionWhenEmailIsNull() { 
     Costumer costumer = new Costumer(VALID_NAME, VALID_PPS, null, VALID_AGE); 
    } 

    @Test(expected = IllegalArgumentException.class) 
    public void shouldThrowExceptionWhenNameIsEmpty() { 
     Costumer costumer = new Costumer("", VALID_PPS, VALID_EMAIL, VALID_AGE); 
    } 

    @Test(expected = IllegalArgumentException.class) 
    public void shouldThrowExceptionWhenNegativePPS() { 
     Costumer costumer = new Costumer(VALID_NAME, 0, VALID_EMAIL, VALID_AGE); 
    } 

    @Test(expected = IllegalArgumentException.class) 
    public void shouldThrowExceptionWhenCostumerAgeIsLessThan18() { 
     Costumer costumer = new Costumer(VALID_NAME, VALID_PPS, VALID_EMAIL, 17); 
    } 

} 

それが適切貸衣装のクラスのユニットテストを書かれて、それはライブのドキュメントのように見えると平易な英語テキストのように読み込みます。同様に

あなたは番目のクラスのためのテストを書く必要があります

 public class CustomerListTest { 


     @Test 
     public void shouldHaveZeroNumberOfCustomersWhenNewCreated() { 
      CustomerList customers = new CustomerList(); 
      Assert.assertEquals(0, customers.getNumberOfCustomers()); 
     } 

     @Test 
     public void shouldIncreaseSizeWhenNewCustomerAdded() { 
      CustomerList customers = new CustomerList(); 
      Customer customer = //valid costumer here; 
      customers.add(customer) 
      Assert.assertEquals(1, customers.getNumberOfCustomers()); 
     } 

     //and so on... 

     @Test 
     public void shouldReturnNullWhenFindByIdInvokedWithNotExistId() { 
      CustomerList customers = new CustomerList(); 
      Assert.assertEquals(null, customers.getById(42)); 
      //return null is bad practice better to return Optional<Customer>, Iterator, or Collection 
     } 

     @Test 
     public void shouldReturnCustomerWithIdWhenItPresentsInList() { 
      CustomerList customers = new CustomerList(); 
      Customer customer = new Customer("name", 1, "email", 20); 
      customers.add(customer); 
      Assert.assertEquals(customer, customers.getById(1)); 
      // this works because not overriden equals checks if it's same instance, 
      //you need to implement equals and hashcode in Customer class 
     } 

     @Test 
     public void shouldReturnNullWhenFindByIdArgumenNotEqualsToStoredCustomersId() { 
      CustomerList customers = new CustomerList(); 
      Customer customer1 = new Customer("name", 1, "email", 20); 
      Customer customer2 = new Customer("name", 2, "email", 20); 
      Customer customer3 = new Customer("name", 3, "email", 20); 
      customers.add(customer1); 
      customers.add(customer2); 
      customers.add(customer3); 
      Assert.assertEquals(null, customers.getById(42)); 
      // this works because not overriden equals checks if it's same instance, 
      //you need to implement equals and hashcode in Customer class 
     } 

} 

あなたはこのスキルを使用すると、コードの前にテストを書きます、TDD技術について何かを読む必要があります。テスト駆動開発に関するベストブックは Test Driven Development by Kent Beck

+0

ありがとう。私はそれらを分けることを考えていた – Tom

+0

findById()のテストケースは何でしょうか? – Tom

+0

@Tom findById()テストケースが追加されました – fxrbfg

関連する問題