Witam forumowiczów,
pierwszy raz zabrałem się w życiu za pisanie testów jednostkowych i nie wiem czy robię to dobrze. Jakby ktoś kto się zna mógł zerknąć, doradzić co poprawić itp. to byłoby super ^^
package pl.xezolpl.cwiczenia.basket;
public class Product {
private String name;
private double price;
private int amount;
///GETTERS
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public int getAmount() {
return amount;
}
///SETTERS
public void setName(String name) {
this.name = name;
}
public void setPrice(double price) {
this.price = price;
}
public void setAmount(int amount) {
this.amount = amount;
}
///CONSTRUCTOR
Product(String name, double price, int amount) {
this.name = name;
this.price = price;
this.amount = amount;
}
}
package pl.xezolpl.cwiczenia.basket;
import java.text.DecimalFormat;
import java.util.*;
import pl.xezolpl.cwiczenia.basket.Product;
public class Basket {
private Map<String, Product> productHashMap = new HashMap<>();
public boolean addProductToBasket(Product product) {
if ((product.getName() == "") || (product.getAmount() == 0) || (product.getPrice() == 0)) {
return false;
} else if (!productIsInTheBasket(product.getName())) {
productHashMap.put(product.getName(), product);
return true;
} else if (productIsInTheBasket(product.getName())) {
productHashMap.get(product.getName()).setAmount(
productHashMap.get(product.getName()).getAmount() + product.getAmount()); /// sum of amounts
return true;
}
return false;
}
public boolean removeProductFromBasket(String productName) {
if (productIsInTheBasket(productName)) {
productHashMap.remove(productName);
return true;
}
return false;
}
public boolean changeAmountOfProductinBasket(String productName, int newAmount) {
if (productIsInTheBasket(productName)) {
productHashMap.get(productName).setAmount(newAmount);
return true;
}
return false;
}
private double calculateBasketContent() {
double sum = 0.0;
for (Map.Entry<String, Product> entry : productHashMap.entrySet()) {
sum += entry.getValue().getAmount() * entry.getValue().getPrice(); /// sum += price*amount
}
return ((double) ((int) (sum*100)))/100; /// cut off to the 2 decimal places
}
public void display() {
System.out.println("YOUR BASKET");
System.out.println("---------------------------");
System.out.println("Name Price Amount\n");
for (Map.Entry<String, Product> entry : productHashMap.entrySet()) {
System.out.println(entry.getValue().getName() + " " + entry.getValue().getPrice() + " "
+ entry.getValue().getAmount());
}
System.out.println("----------------");
System.out.println("Total price: " + calculateBasketContent());
}
private boolean productIsInTheBasket(String productName) {
if (productHashMap.get(productName) != null) {
return true;
}
return false;
}
}
package pl.xezolpl.cwiczenia.basket;
import org.junit.*;
public class Tests {
private Product apple;
private Basket basket;
private static final double price = 0.01;
@Before
public void setUp() {
apple = new Product("Apple", 2.99, 4);
basket = new Basket();
}
@Test
public void shouldAllowToAddProduct() {
Assert.assertTrue(basket.addProductToBasket(apple));
}
@Test
public void shouldDenyToAddBlankProduct() {
Assert.assertFalse(basket.addProductToBasket(new Product("", 0, 0)));
}
@Test
public void shouldAllowToAddTheSameItemTwice() {
basket.addProductToBasket(apple);
Assert.assertTrue(basket.addProductToBasket(apple));
basket.display();
}
@Test
public void shouldAllowToChangeProductWhatIsNotInTheBasket() {
Assert.assertFalse(basket.changeAmountOfProductinBasket("Something", 3));
}
@Test
public void shouldAllowToChangeProductAmount() {
basket.addProductToBasket(apple);
Assert.assertTrue(basket.changeAmountOfProductinBasket(apple.getName(), 7));
}
@Test
public void shouldAllowToRemoveProductFromBasket() {
basket.addProductToBasket(apple);
Assert.assertTrue(basket.removeProductFromBasket(apple.getName()));
}
@Test
public void shouldAllowToRemoveProductWhatIsNotInTheBasket(){
Assert.assertFalse(basket.removeProductFromBasket("Something"));
}
}
I czy w ogóle o to w tym chodzi, czy nie przesadziłem z if-ami w części basket-owej, bo mam takie wrażenie?