Skip to content

Commit 656ca6e

Browse files
Merge pull request eugenp#9729 from developerDiv/argumentcaptor
BAEL-4261 - ArgumentMatcher with Stubbing
2 parents e45965a + 888926f commit 656ca6e

8 files changed

Lines changed: 220 additions & 0 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.baeldung.mockito.argumentcaptor;
2+
3+
public enum AuthenticationStatus {
4+
AUTHENTICATED,
5+
NOT_AUTHENTICATED,
6+
ERROR
7+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.baeldung.mockito.argumentcaptor;
2+
3+
public class Credentials {
4+
private final String name;
5+
private final String password;
6+
private final String key;
7+
8+
public Credentials(String name, String password, String key) {
9+
this.name = name;
10+
this.password = password;
11+
this.key = key;
12+
}
13+
}
14+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.baeldung.mockito.argumentcaptor;
2+
3+
public interface DeliveryPlatform {
4+
5+
void deliver(Email email);
6+
7+
String getServiceStatus();
8+
9+
AuthenticationStatus authenticate(Credentials credentials);
10+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.baeldung.mockito.argumentcaptor;
2+
3+
public class Email {
4+
5+
private String address;
6+
private String subject;
7+
private String body;
8+
private Format format;
9+
10+
public Email(String address, String subject, String body) {
11+
this.address = address;
12+
this.subject = subject;
13+
this.body = body;
14+
}
15+
16+
public String getAddress() {
17+
return address;
18+
}
19+
20+
public void setAddress(String address) {
21+
this.address = address;
22+
}
23+
24+
public String getSubject() {
25+
return subject;
26+
}
27+
28+
public void setSubject(String subject) {
29+
this.subject = subject;
30+
}
31+
32+
public String getBody() {
33+
return body;
34+
}
35+
36+
public void setBody(String body) {
37+
this.body = body;
38+
}
39+
40+
public Format getFormat() {
41+
return format;
42+
}
43+
44+
public void setFormat(Format format) {
45+
this.format = format;
46+
}
47+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.baeldung.mockito.argumentcaptor;
2+
3+
public class EmailService {
4+
5+
private DeliveryPlatform platform;
6+
7+
public EmailService(DeliveryPlatform platform) {
8+
this.platform = platform;
9+
}
10+
11+
public void send(String to, String subject, String body, boolean html) {
12+
Format format = Format.TEXT_ONLY;
13+
if (html) {
14+
format = Format.HTML;
15+
}
16+
Email email = new Email(to, subject, body);
17+
email.setFormat(format);
18+
platform.deliver(email);
19+
}
20+
21+
public ServiceStatus checkServiceStatus() {
22+
if (platform.getServiceStatus().equals("OK")) {
23+
return ServiceStatus.UP;
24+
} else {
25+
return ServiceStatus.DOWN;
26+
}
27+
}
28+
29+
public boolean authenticatedSuccessfully(Credentials credentials) {
30+
if (platform.authenticate(credentials).equals(AuthenticationStatus.AUTHENTICATED)) {
31+
return true;
32+
} else {
33+
return false;
34+
}
35+
}
36+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.baeldung.mockito.argumentcaptor;
2+
3+
public enum Format {
4+
TEXT_ONLY,
5+
HTML
6+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.baeldung.mockito.argumentcaptor;
2+
3+
public enum ServiceStatus {
4+
UP,
5+
DOWN,
6+
AUTHENTICATED
7+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package com.baeldung.mockito.argumentcaptor;
2+
3+
import org.junit.Test;
4+
import org.junit.runner.RunWith;
5+
import org.mockito.*;
6+
import org.mockito.junit.MockitoJUnitRunner;
7+
8+
import static org.junit.Assert.*;
9+
10+
@RunWith(MockitoJUnitRunner.class)
11+
public class EmailServiceUnitTest {
12+
13+
@Mock
14+
DeliveryPlatform platform;
15+
16+
@InjectMocks
17+
EmailService emailService;
18+
19+
@Captor
20+
ArgumentCaptor<Email> emailCaptor;
21+
22+
@Captor
23+
ArgumentCaptor<Credentials> credentialsCaptor;
24+
25+
@Test
26+
public void whenDoesNotSupportHtml_expectTextOnlyEmailFormat() {
27+
String to = "info@baeldung.com";
28+
String subject = "Using ArgumentCaptor";
29+
String body = "Hey, let'use ArgumentCaptor";
30+
31+
emailService.send(to, subject, body, false);
32+
33+
Mockito.verify(platform).deliver(emailCaptor.capture());
34+
Email emailCaptorValue = emailCaptor.getValue();
35+
assertEquals(Format.TEXT_ONLY, emailCaptorValue.getFormat());
36+
}
37+
38+
@Test
39+
public void whenDoesSupportHtml_expectHTMLEmailFormat() {
40+
String to = "info@baeldung.com";
41+
String subject = "Using ArgumentCaptor";
42+
String body = "<html><body>Hey, let'use ArgumentCaptor</body></html>";
43+
44+
emailService.send(to, subject, body, true);
45+
46+
Mockito.verify(platform).deliver(emailCaptor.capture());
47+
Email value = emailCaptor.getValue();
48+
assertEquals(Format.HTML, value.getFormat());
49+
}
50+
51+
@Test
52+
public void whenServiceRunning_expectUpResponse() {
53+
Mockito.when(platform.getServiceStatus()).thenReturn("OK");
54+
55+
ServiceStatus serviceStatus = emailService.checkServiceStatus();
56+
57+
assertEquals(ServiceStatus.UP, serviceStatus);
58+
}
59+
60+
@Test
61+
public void whenServiceNotRunning_expectDownResponse() {
62+
Mockito.when(platform.getServiceStatus()).thenReturn("Error");
63+
64+
ServiceStatus serviceStatus = emailService.checkServiceStatus();
65+
66+
assertEquals(ServiceStatus.DOWN, serviceStatus);
67+
}
68+
69+
@Test
70+
public void whenUsingArgumentMatcherForValidCredentials_expectTrue() {
71+
Credentials credentials = new Credentials("baeldung", "correct_password", "correct_key");
72+
Mockito.when(platform.authenticate(Mockito.eq(credentials))).thenReturn(AuthenticationStatus.AUTHENTICATED);
73+
74+
assertTrue(emailService.authenticatedSuccessfully(credentials));
75+
}
76+
77+
@Test
78+
public void whenUsingArgumentCaptorForValidCredentials_expectTrue() {
79+
Credentials credentials = new Credentials("baeldung", "correct_password", "correct_key");
80+
Mockito.when(platform.authenticate(credentialsCaptor.capture())).thenReturn(AuthenticationStatus.AUTHENTICATED);
81+
82+
assertTrue(emailService.authenticatedSuccessfully(credentials));
83+
assertEquals(credentials, credentialsCaptor.getValue());
84+
}
85+
86+
@Test
87+
public void whenNotAuthenticated_expectFalse() {
88+
Credentials credentials = new Credentials("baeldung", "incorrect_password", "incorrect_key");
89+
Mockito.when(platform.authenticate(Mockito.eq(credentials))).thenReturn(AuthenticationStatus.NOT_AUTHENTICATED);
90+
91+
assertFalse(emailService.authenticatedSuccessfully(credentials));
92+
}
93+
}

0 commit comments

Comments
 (0)