Skip to content

Commit 5f85a1c

Browse files
committed
added spring boot unit test example
1 parent 576a726 commit 5f85a1c

File tree

6 files changed

+109
-0
lines changed

6 files changed

+109
-0
lines changed

spring-boot/spring-boot-testing/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@ dependencies {
3131
runtime('com.h2database:h2')
3232
testCompile('org.springframework.boot:spring-boot-starter-test')
3333
testCompile 'org.junit.jupiter:junit-jupiter-engine:5.2.0'
34+
testCompile('org.mockito:mockito-junit-jupiter:2.23.0')
3435
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.reflectoring.testing;
2+
3+
import java.time.LocalDateTime;
4+
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.stereotype.Service;
7+
8+
@Service
9+
@RequiredArgsConstructor
10+
public class RegisterUseCase {
11+
12+
private final UserRepository userRepository;
13+
14+
public User registerUser(User user) {
15+
user.setRegistrationDate(LocalDateTime.now());
16+
return userRepository.save(user);
17+
}
18+
19+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package io.reflectoring.testing;
2+
3+
import javax.persistence.Entity;
4+
import javax.persistence.Id;
5+
6+
import java.time.LocalDateTime;
7+
8+
import lombok.AllArgsConstructor;
9+
import lombok.Data;
10+
11+
@Entity
12+
@Data
13+
@AllArgsConstructor
14+
public class User {
15+
16+
@Id
17+
private Long id;
18+
private String name;
19+
private String email;
20+
private LocalDateTime registrationDate;
21+
22+
public User(String name, String email) {
23+
this.name = name;
24+
this.email = email;
25+
}
26+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.reflectoring.testing;
2+
3+
4+
import org.springframework.data.repository.CrudRepository;
5+
6+
public interface UserRepository extends CrudRepository<User, Long> {
7+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.reflectoring.testing;
2+
3+
import org.junit.jupiter.api.BeforeEach;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.api.extension.ExtendWith;
6+
import org.mockito.Mock;
7+
import org.mockito.junit.jupiter.MockitoExtension;
8+
import static io.reflectoring.testing.UserAssert.assertThat;
9+
import static org.mockito.AdditionalAnswers.*;
10+
import static org.mockito.ArgumentMatchers.any;
11+
import static org.mockito.Mockito.*;
12+
13+
@ExtendWith(MockitoExtension.class)
14+
class RegisterUseCaseTest {
15+
16+
@Mock
17+
private UserRepository userRepository;
18+
19+
private RegisterUseCase registerUseCase;
20+
21+
@BeforeEach
22+
void initUseCase() {
23+
registerUseCase = new RegisterUseCase(userRepository);
24+
}
25+
26+
@Test
27+
void savedUserHasRegistrationDate() {
28+
User user = new User("zaphod", "[email protected]");
29+
when(userRepository.save(any(User.class))).then(returnsFirstArg());
30+
User savedUser = registerUseCase.registerUser(user);
31+
assertThat(savedUser).hasRegistrationDate();
32+
}
33+
34+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.reflectoring.testing;
2+
3+
import org.assertj.core.api.AbstractAssert;
4+
5+
public class UserAssert extends AbstractAssert<UserAssert, User> {
6+
7+
public UserAssert(User user) {
8+
super(user, UserAssert.class);
9+
}
10+
11+
public static UserAssert assertThat(User actual) {
12+
return new UserAssert(actual);
13+
}
14+
15+
public UserAssert hasRegistrationDate() {
16+
isNotNull();
17+
if (actual.getRegistrationDate() == null) {
18+
failWithMessage("Expected user to have a registration date, but it was null");
19+
}
20+
return this;
21+
}
22+
}

0 commit comments

Comments
 (0)