2-4. ProductManager를 구현한 SimpleProductManager를 생성한다.

 

src/springapp/service/SimpleProductManager.java

 

package springapp.service;

 

import java.util.List;

 

import springapp.domain.Product;

 

public class SimpleProductManager implements ProductManager {

 

    public List<Product> getProducts() {

        throw new UnsupportedOperationException();

    }

 

    public void increasePrice(int percentage) {

        throw new UnsupportedOperationException();       

    }

 

    public void setProducts(List<Product> products) {

        throw new UnsupportedOperationException();       

    }

 

}


2-5. TDD는 좋은것이여. 따라서 SimpleProductManager를 테스트하기 위한

SimpleProductManagerTests를 생성한다.

 

test/springapp/service/SimpleProductManagerTests.java

 

package springapp.service;
 import junit.framework.TestCase;
 public class SimpleProductManagerTests extends TestCase {
   private SimpleProductManager productManager;
   protected void setUp() throws Exception {
        productManager = new SimpleProductManager();
    }
     public void testGetProductsWithNoProducts() {
        productManager = new SimpleProductManager();
        assertNull(productManager.getProducts());
    }

}






2-6. 테스트를 실행해보면 오류가 발생한다. 우선 SimpleProductManagerTestssetUp 메소드에
stub list를 선언하고 테스트 메소드를 추가한다.

 

test/springapp/service/SimpleProductManagerTests.java

 

package springapp.service;
 
import java.util.ArrayList;
import java.util.List;
 
import springapp.domain.Product;
 
import junit.framework.TestCase;
 
public class SimpleProductManagerTests extends TestCase {
 
    private SimpleProductManager productManager;
    private List<Product> products;
    
    private static int PRODUCT_COUNT = 2;
    
    private static Double CHAIR_PRICE = new Double(20.50);
    private static String CHAIR_DESCRIPTION = "Chair";
    
    private static String TABLE_DESCRIPTION = "Table";
    private static Double TABLE_PRICE = new Double(150.10);         
        
    protected void setUp() throws Exception {
        productManager = new SimpleProductManager();
        products = new ArrayList<Product>();
        
        // stub up a list of products
        Product product = new Product();
        product.setDescription("Chair");
        product.setPrice(CHAIR_PRICE);
        products.add(product);
        
        product = new Product();
        product.setDescription("Table");
        product.setPrice(TABLE_PRICE);
        products.add(product);
        
        productManager.setProducts(products);
    }
 
    public void testGetProductsWithNoProducts() {
        productManager = new SimpleProductManager();
        assertNull(productManager.getProducts());
    }
    
    public void testGetProducts() {
        List<Product> products = productManager.getProducts();
        assertNotNull(products);        
        assertEquals(PRODUCT_COUNT, productManager.getProducts().size());
    
        Product product = products.get(0);
        assertEquals(CHAIR_DESCRIPTION, product.getDescription());
        assertEquals(CHAIR_PRICE, product.getPrice());
        
        product = products.get(1);
        assertEquals(TABLE_DESCRIPTION, product.getDescription());
        assertEquals(TABLE_PRICE, product.getPrice());      
    }   
}
 

2-7. 다시 테스트를 실행하면 또 오류가 발생한다. ? SimpleProductManager가 무조건 Exception

리턴하므로. 따라서 SimpleProductManager의 메소드들을 구현한다.

 

src/springapp/service/SimpleProductManager.java

 

package springapp.service;
 
import java.util.ArrayList;
import java.util.List;
 
import springapp.domain.Product;
 
public class SimpleProductManager implements ProductManager {
 
    private List<Product> products;
    
    public List<Product> getProducts() {
        return products;
    }
 
    public void increasePrice(int percentage) {
        // TODO Auto-generated method stub      
    }
 
    public void setProducts(List<Product> products) {
        this.products = products;
    }
    
}
 

2-8. 테스트를 재실행하면 모두 통과한다.

    이후에 increasePrice()의 테스트를 위하여 아래 테스트를 구현한다.

product list null인 경우

product list empty인 경우

10% 증가시 모든 product list에 반영되는지 여부

 

springapp/test/springapp/service/SimpleProductManagerTests.java


package springapp.service;
 
import java.util.ArrayList;
import java.util.List;
 
import springapp.domain.Product;
 
import junit.framework.TestCase;
 
public class SimpleProductManagerTests extends TestCase {
 
    private SimpleProductManager productManager;
 
    private List<Product> products;
    
    private static int PRODUCT_COUNT = 2;
    
    private static Double CHAIR_PRICE = new Double(20.50);
    private static String CHAIR_DESCRIPTION = "Chair";
    
    private static String TABLE_DESCRIPTION = "Table";
    private static Double TABLE_PRICE = new Double(150.10);         
    
    private static int POSITIVE_PRICE_INCREASE = 10;
    
    protected void setUp() throws Exception {
        productManager = new SimpleProductManager();
        products = new ArrayList<Product>();
        
        // stub up a list of products
        Product product = new Product();
        product.setDescription("Chair");
        product.setPrice(CHAIR_PRICE);
        products.add(product);
        
        product = new Product();
        product.setDescription("Table");
        product.setPrice(TABLE_PRICE);
        products.add(product);
        
        productManager.setProducts(products);
    }
 
    public void testGetProductsWithNoProducts() {
        productManager = new SimpleProductManager();
        assertNull(productManager.getProducts());
    }
    
    public void testGetProducts() {
        List<Product> products = productManager.getProducts();
        assertNotNull(products);        
        assertEquals(PRODUCT_COUNT, productManager.getProducts().size());
    
        Product product = products.get(0);
        assertEquals(CHAIR_DESCRIPTION, product.getDescription());
        assertEquals(CHAIR_PRICE, product.getPrice());
        
        product = products.get(1);
        assertEquals(TABLE_DESCRIPTION, product.getDescription());
        assertEquals(TABLE_PRICE, product.getPrice());      
    }   
    
    public void testIncreasePriceWithNullListOfProducts() {
        try {
            productManager = new SimpleProductManager();
            productManager.increasePrice(POSITIVE_PRICE_INCREASE);
        }
        catch(NullPointerException ex) {
            fail("Products list is null.");
        }
    }
    
    public void testIncreasePriceWithEmptyListOfProducts() {
        try {
            productManager = new SimpleProductManager();
            productManager.setProducts(new ArrayList<Product>());
            productManager.increasePrice(POSITIVE_PRICE_INCREASE);
        }
        catch(Exception ex) {
            fail("Products list is empty.");
        }           
    }
    
    public void testIncreasePriceWithPositivePercentage() {
        productManager.increasePrice(POSITIVE_PRICE_INCREASE);
        double expectedChairPriceWithIncrease = 22.55;
        double expectedTablePriceWithIncrease = 165.11;
        
        List<Product> products = productManager.getProducts();      
        Product product = products.get(0);
        assertEquals(expectedChairPriceWithIncrease, product.getPrice());
        
        product = products.get(1);      
        assertEquals(expectedTablePriceWithIncrease, product.getPrice());       
    }
        
}
 

2-9. 테스트를 작성했으면, 해당 Manager를 수정해야 한다. 가자..

 

src/springapp/service/SimpleProductManager.java

 

package springapp.service;
 
import java.util.List;
 
import springapp.domain.Product;
 
public class SimpleProductManager implements ProductManager {
 
    private List<Product> products;
    
    public List<Product> getProducts() {
        return products;
    }
 
    public void increasePrice(int percentage) {
        if (products != null) {
            for (Product product : products) {
                double newPrice = product.getPrice().doubleValue() * 
                                    (100 + percentage)/100;
                product.setPrice(newPrice);
            }
        }
    }
    
    public void setProducts(List<Product> products) {
        this.products = products;
    }
    
}
 
2-10. 테스트가 통과된다.



















'개발 > 스프링' 카테고리의 다른 글

스프링 tutorial (7)  (0) 2008.07.27
스프링 tutorial (6)  (0) 2008.07.26
스프링 tutorial (4)  (0) 2008.07.17
스프링 tutorial (3)  (0) 2008.07.17
스프링 tutorial (2)  (0) 2008.07.16
Posted by 무혹
,