File tree Expand file tree Collapse file tree 6 files changed +109
-0
lines changed
spring-boot/spring-boot-testing
main/java/io/reflectoring/testing
test/java/io/reflectoring/testing Expand file tree Collapse file tree 6 files changed +109
-0
lines changed Original file line number Diff line number Diff line change @@ -31,4 +31,5 @@ dependencies {
31
31
runtime(' com.h2database:h2' )
32
32
testCompile(' org.springframework.boot:spring-boot-starter-test' )
33
33
testCompile ' org.junit.jupiter:junit-jupiter-engine:5.2.0'
34
+ testCompile(' org.mockito:mockito-junit-jupiter:2.23.0' )
34
35
}
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
1
+ package io .reflectoring .testing ;
2
+
3
+
4
+ import org .springframework .data .repository .CrudRepository ;
5
+
6
+ public interface UserRepository extends CrudRepository <User , Long > {
7
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments