Junit and AssertJ
✅ Junit
- framework to help testing
assertEquals
✅ AssertJ
- APIs to help testing
assertThat().isEqualTo()assertThat().hasSize()assertThat().isEmpty()
Manual Testing 🆚 Automatized Testing
- Manual testing
1
2
3
4
5
6
7
8
@Test
void add(){
CafeKiosk cafeKiosk = new CafeKiosk();
cafeKiosk.add(new Americano());
System.out.println(">>> Get total bev num: " + cafeKiosk.getBeverages().size());
System.out.println(">>> Get bev name: " + cafeKiosk.getBeverages().get(0).getName());
}
- Automatized testing
1
2
3
4
5
6
7
8
9
10
@Test
void add() {
CafeKiosk cafeKiosk = new CafeKiosk();
cafeKiosk.add(new Americano());
assertThat(cafeKiosk.getBeverages().size()).isEqualTo(1);
assertThat(cafeKiosk.getBeverages()).hasSize(1);
assertThat(cafeKiosk.getBeverages().get(0).getName()).isEqualTo("Americano");
}
JUnit 🆚 AssertJ
1
2
3
4
5
6
7
8
9
@Test
void getName() {
Americano americano = new Americano();
//JunitAPI
assertEquals(americano.getName(), "Americano");
//AssertJ
assertThat(americano.getName()).isEqualTo("Americano");
}
✅ Examples of simple test code
☑️ Add one beverage
- ✔️ production code
1
2
3
4
5
private final List<Beverage> beverages = new ArrayList<>();
public void add(Beverage beverage) {
beverages.add(beverage);
}
- ✔️ test code
1
2
3
4
5
6
7
8
@Test
void add() {
CafeKiosk cafeKiosk = new CafeKiosk();
cafeKiosk.add(new Americano());
assertThat(cafeKiosk.getBeverages().size()).isEqualTo(1);
assertThat(cafeKiosk.getBeverages()).hasSize(1);
assertThat(cafeKiosk.getBeverages().get(0).getName()).isEqualTo("Americano");
}
☑️ Add several beverages
- ✔️ production code
1
2
3
4
5
6
7
8
public void add(Beverage beverage, int count){
if(count <= 0){
throw new IllegalStateException("Can order more than one drink");
}
for (int i = 0; i < count; i++) {
beverages.add(beverage);
}
}
- ✔️ test code
1
2
3
4
5
6
7
8
9
10
11
@Test
void addSeveral() {
CafeKiosk cafeKiosk = new CafeKiosk();
Americano americano = new Americano();
cafeKiosk.add(americano, 10);
assertThat(cafeKiosk.getBeverages()).hasSize(10);
assertThat(cafeKiosk.getBeverages().get(0).getName()).isEqualTo("Americano");
assertThat(cafeKiosk.getBeverages().get(0)).isEqualTo(americano);
assertThat(cafeKiosk.getBeverages().get(1)).isEqualTo(americano);
}
☑️ Remove a beverage
- ✔️ production code
1
2
3
4
public void remove(Beverage beverage) {
beverages.remove(beverage);
}
- ✔️ test code
1
2
3
4
5
6
7
8
9
10
11
@Test
void remove() {
CafeKiosk cafeKiosk = new CafeKiosk();
Americano americano = new Americano();
cafeKiosk.add(americano);
assertThat(cafeKiosk.getBeverages()).hasSize(1);
cafeKiosk.remove(americano);
assertThat(cafeKiosk.getBeverages()).hasSize(0);
assertThat(cafeKiosk.getBeverages()).isEmpty();
}
☑️ Clear all added beverages
- ✔️ production code
1
2
3
4
public void clear() {
beverages.clear();
}
- ✔️ test code
1
2
3
4
5
6
7
8
9
10
@Test
void clear() {
CafeKiosk cafeKiosk = new CafeKiosk();
cafeKiosk.add(new Americano());
cafeKiosk.add(new Latte());
assertThat(cafeKiosk.getBeverages()).hasSize(2);
cafeKiosk.clear();
assertThat(cafeKiosk.getBeverages()).isEmpty();
}
☑️ Calculate total price
- ✔️ production code
1
2
3
4
5
6
7
public int calculateTotalPrice() {
int total = 0;
for (Beverage beverage : beverages) {
total += beverage.getPrice();
}
return total;
}
- ✔️ test code
1
2
3
4
5
6
7
8
@Test
void getTotalPrice() {
CafeKiosk cafeKiosk = new CafeKiosk();
cafeKiosk.add(new Americano());
cafeKiosk.add(new Latte());
assertThat(cafeKiosk.calculateTotalPrice()).isEqualTo(9000);
}
💥 If method throws exception
- ✔️ production code
- if
count <= 0cannot add to beverages list
1
2
3
4
5
6
7
8
public void add(Beverage beverage, int count){
if(count <= 0){
throw new IllegalStateException("Can order more than one drink");
}
for (int i = 0; i < count; i++) {
beverages.add(beverage);
}
}
- ✔️ test code
1
2
3
4
5
6
7
8
@Test
void addException() {
CafeKiosk cafeKiosk = new CafeKiosk();
Americano americano = new Americano();
assertThatThrownBy(()-> cafeKiosk.add(americano, 0))
.isInstanceOf(IllegalStateException.class)
.hasMessage("Can order more than one drink");
}
⚠️ When an outside factor needs to be tested with exception
- outside factor: time
- when creating order,
if
current timeis outsidecafe open time, throw exception- ✔️ production code
- 💊 send
current timeas parameter
1
2
3
4
5
6
7
8
9
10
public Order createOrder(LocalDateTime currentDateTime){
LocalTime currentTime = currentDateTime.toLocalTime();
if(currentTime.isBefore(CAFE_OPEN_TIME) || currentTime.isAfter(CAFE_CLOSE_TIME)){
throw new IllegalStateException("This is not order time. Inquire to manager");
}
return new Order(currentDateTime, beverages);
}
- ✔️ test code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// inside cafe open time, no exception
@Test
void createOrderWithCurrentTime() {
CafeKiosk cafeKiosk = new CafeKiosk();
Americano americano = new Americano();
cafeKiosk.add(americano);
// 💊 send current time as parameter in production code
Order order = cafeKiosk.createOrder(LocalDateTime.of(2026, 2, 16, 12, 40));
assertThat(order.getBeverages()).hasSize(1);
assertThat(order.getBeverages().get(0).getName()).isEqualTo("Americano");
}
// outside cafe open time, 💥 throw exception
@Test
void createOrderOutsideCurrentTime() {
CafeKiosk cafeKiosk = new CafeKiosk();
Americano americano = new Americano();
cafeKiosk.add(americano);
// 💊 send current time as parameter in production code
assertThatThrownBy(()->cafeKiosk.createOrder(LocalDateTime.of(2026, 2, 16, 9, 59)))
.isInstanceOf(IllegalStateException.class)
.hasMessage("This is not order time. Inquire to manager");
}
✅
- ✔️ production code
1
- ✔️ test code
1
This post is licensed under CC BY 4.0 by the author.