Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitac3cdfb

Browse files
committed
1) Updated test cases to use Junit Assert method as compared to assert keyword 2) Proper testing of RemoteService using RandomProvider interface. Introduced RandomProvider interface so that randomness can be controlled from test cases. 3) For readability used constant for representing FAILURE
1 parentdb33cc5 commitac3cdfb

File tree

8 files changed

+270
-14
lines changed

8 files changed

+270
-14
lines changed

‎ambassador.patch

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
diff --git a/ambassador/src/main/java/com/iluwatar/ambassador/RemoteService.java b/ambassador/src/main/java/com/iluwatar/ambassador/RemoteService.java
2+
index 225e033..52b792b 100644
3+
--- a/ambassador/src/main/java/com/iluwatar/ambassador/RemoteService.java
4+
+++ b/ambassador/src/main/java/com/iluwatar/ambassador/RemoteService.java
5+
@@ -22,6 +22,7 @@
6+
*/
7+
package com.iluwatar.ambassador;
8+
9+
+import com.iluwatar.ambassador.util.RandomProvider;
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
12+
13+
@@ -31,9 +32,10 @@ import static java.lang.Thread.sleep;
14+
* A remote legacy application represented by a Singleton implementation.
15+
*/
16+
public class RemoteService implements RemoteServiceInterface {
17+
-
18+
+ static final int THRESHOLD = 200;
19+
private static final Logger LOGGER = LoggerFactory.getLogger(RemoteService.class);
20+
private static RemoteService service = null;
21+
+ private final RandomProvider randomProvider;
22+
23+
static synchronized RemoteService getRemoteService() {
24+
if (service == null) {
25+
@@ -42,24 +44,33 @@ public class RemoteService implements RemoteServiceInterface {
26+
return service;
27+
}
28+
29+
- private RemoteService() {}
30+
+ private RemoteService() {
31+
+ this(Math::random);
32+
+ }
33+
34+
/**
35+
+ * This constuctor is used for testing purposes only.
36+
+ */
37+
+ RemoteService(RandomProvider randomProvider) {
38+
+ this.randomProvider = randomProvider;
39+
+ }
40+
+ /**
41+
* Remote function takes a value and multiplies it by 10 taking a random amount of time.
42+
* Will sometimes return -1. This imitates connectivity issues a client might have to account for.
43+
* @param value integer value to be multiplied.
44+
- * @return if waitTime is more than 200ms, it returns value * 10, otherwise -1.
45+
+ * @return if waitTime is less than {@link RemoteService#THRESHOLD}, it returns value * 10,
46+
+ * otherwise {@link RemoteServiceInterface#FAILURE}.
47+
*/
48+
@Override
49+
public long doRemoteFunction(int value) {
50+
51+
- long waitTime = (long) Math.floor(Math.random() * 1000);
52+
+ long waitTime = (long) Math.floor(randomProvider.random() * 1000);
53+
54+
try {
55+
sleep(waitTime);
56+
} catch (InterruptedException e) {
57+
LOGGER.error("Thread sleep state interrupted", e);
58+
}
59+
- return waitTime >= 200 ? value * 10 : -1;
60+
+ return waitTime <= THRESHOLD ? value * 10 : FAILURE;
61+
}
62+
}
63+
diff --git a/ambassador/src/main/java/com/iluwatar/ambassador/RemoteServiceInterface.java b/ambassador/src/main/java/com/iluwatar/ambassador/RemoteServiceInterface.java
64+
index 940313d..e228271 100644
65+
--- a/ambassador/src/main/java/com/iluwatar/ambassador/RemoteServiceInterface.java
66+
+++ b/ambassador/src/main/java/com/iluwatar/ambassador/RemoteServiceInterface.java
67+
@@ -26,6 +26,7 @@ package com.iluwatar.ambassador;
68+
* Interface shared by ({@link RemoteService}) and ({@link ServiceAmbassador}).
69+
*/
70+
interface RemoteServiceInterface {
71+
-
72+
+ int FAILURE = -1;
73+
+
74+
long doRemoteFunction(int value) throws Exception;
75+
}
76+
diff --git a/ambassador/src/main/java/com/iluwatar/ambassador/ServiceAmbassador.java b/ambassador/src/main/java/com/iluwatar/ambassador/ServiceAmbassador.java
77+
index 4be1dfc..52cd7df 100644
78+
--- a/ambassador/src/main/java/com/iluwatar/ambassador/ServiceAmbassador.java
79+
+++ b/ambassador/src/main/java/com/iluwatar/ambassador/ServiceAmbassador.java
80+
@@ -59,15 +59,15 @@ public class ServiceAmbassador implements RemoteServiceInterface {
81+
private long safeCall(int value) {
82+
83+
int retries = 0;
84+
- long result = -1;
85+
+ long result = FAILURE;
86+
87+
for (int i = 0; i < RETRIES; i++) {
88+
89+
if (retries >= RETRIES) {
90+
- return -1;
91+
+ return FAILURE;
92+
}
93+
94+
- if ((result = checkLatency(value)) == -1) {
95+
+ if ((result = checkLatency(value)) == FAILURE) {
96+
LOGGER.info("Failed to reach remote: (" + (i + 1) + ")");
97+
retries++;
98+
try {
99+
diff --git a/ambassador/src/main/java/com/iluwatar/ambassador/util/RandomProvider.java b/ambassador/src/main/java/com/iluwatar/ambassador/util/RandomProvider.java
100+
new file mode 100644
101+
index 0000000..3afa3a6
102+
--- /dev/null
103+
+++ b/ambassador/src/main/java/com/iluwatar/ambassador/util/RandomProvider.java
104+
@@ -0,0 +1,8 @@
105+
+package com.iluwatar.ambassador.util;
106+
+
107+
+/**
108+
+ * An interface for randomness. Useful for testing purposes.
109+
+ */
110+
+public interface RandomProvider {
111+
+ double random();
112+
+}
113+
diff --git a/ambassador/src/test/java/com/iluwatar/ambassador/ClientTest.java b/ambassador/src/test/java/com/iluwatar/ambassador/ClientTest.java
114+
index 9354c4f..1d69a6a 100644
115+
--- a/ambassador/src/test/java/com/iluwatar/ambassador/ClientTest.java
116+
+++ b/ambassador/src/test/java/com/iluwatar/ambassador/ClientTest.java
117+
@@ -24,6 +24,8 @@ package com.iluwatar.ambassador;
118+
119+
import org.junit.jupiter.api.Test;
120+
121+
+import static org.junit.jupiter.api.Assertions.assertTrue;
122+
+
123+
/**
124+
* Test for {@link Client}
125+
*/
126+
@@ -35,6 +37,6 @@ public class ClientTest {
127+
Client client = new Client();
128+
long result = client.useService(10);
129+
130+
- assert result == 100 || result == -1;
131+
+ assertTrue(result == 100 || result == -1);
132+
}
133+
}
134+
diff --git a/ambassador/src/test/java/com/iluwatar/ambassador/RemoteServiceTest.java b/ambassador/src/test/java/com/iluwatar/ambassador/RemoteServiceTest.java
135+
index e0b297a..7d01469 100644
136+
--- a/ambassador/src/test/java/com/iluwatar/ambassador/RemoteServiceTest.java
137+
+++ b/ambassador/src/test/java/com/iluwatar/ambassador/RemoteServiceTest.java
138+
@@ -22,16 +22,43 @@
139+
*/
140+
package com.iluwatar.ambassador;
141+
142+
+import com.iluwatar.ambassador.util.RandomProvider;
143+
import org.junit.jupiter.api.Test;
144+
145+
+import static org.junit.jupiter.api.Assertions.assertEquals;
146+
+import static org.junit.jupiter.api.Assertions.assertTrue;
147+
+
148+
/**
149+
* Test for {@link RemoteService}
150+
*/
151+
public class RemoteServiceTest {
152+
153+
@Test
154+
- public void test() {
155+
- long result = RemoteService.getRemoteService().doRemoteFunction(10);
156+
- assert result == 100 || result == -1;
157+
+ public void testFailedCall() {
158+
+ RemoteService remoteService = new RemoteService(
159+
+ new StaticRandomProvider(0.21));
160+
+ long result = remoteService.doRemoteFunction(10);
161+
+ assertEquals(RemoteServiceInterface.FAILURE, result);
162+
+ }
163+
+
164+
+ @Test
165+
+ public void testSuccessfulCall() {
166+
+ RemoteService remoteService = new RemoteService(
167+
+ new StaticRandomProvider(0.2));
168+
+ long result = remoteService.doRemoteFunction(10);
169+
+ assertEquals(100, result);
170+
+ }
171+
+
172+
+ private class StaticRandomProvider implements RandomProvider {
173+
+ private double value;
174+
+
175+
+ StaticRandomProvider(double value) {
176+
+ this.value = value;
177+
+ }
178+
+
179+
+ @Override
180+
+ public double random() {
181+
+ return value;
182+
+ }
183+
}
184+
}
185+
diff --git a/ambassador/src/test/java/com/iluwatar/ambassador/ServiceAmbassadorTest.java b/ambassador/src/test/java/com/iluwatar/ambassador/ServiceAmbassadorTest.java
186+
index 432df9f..72e7106 100644
187+
--- a/ambassador/src/test/java/com/iluwatar/ambassador/ServiceAmbassadorTest.java
188+
+++ b/ambassador/src/test/java/com/iluwatar/ambassador/ServiceAmbassadorTest.java
189+
@@ -24,6 +24,8 @@ package com.iluwatar.ambassador;
190+
191+
import org.junit.jupiter.api.Test;
192+
193+
+import static org.junit.jupiter.api.Assertions.assertTrue;
194+
+
195+
/**
196+
* Test for {@link ServiceAmbassador}
197+
*/
198+
@@ -32,6 +34,6 @@ public class ServiceAmbassadorTest {
199+
@Test
200+
public void test() {
201+
long result = new ServiceAmbassador().doRemoteFunction(10);
202+
- assert result == 100 || result == -1;
203+
+ assertTrue(result == 100 || result == RemoteServiceInterface.FAILURE);
204+
}
205+
}

‎ambassador/src/main/java/com/iluwatar/ambassador/RemoteService.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
*/
2323
packagecom.iluwatar.ambassador;
2424

25+
importcom.iluwatar.ambassador.util.RandomProvider;
2526
importorg.slf4j.Logger;
2627
importorg.slf4j.LoggerFactory;
2728

@@ -31,9 +32,10 @@
3132
* A remote legacy application represented by a Singleton implementation.
3233
*/
3334
publicclassRemoteServiceimplementsRemoteServiceInterface {
34-
35+
staticfinalintTHRESHOLD =200;
3536
privatestaticfinalLoggerLOGGER =LoggerFactory.getLogger(RemoteService.class);
3637
privatestaticRemoteServiceservice =null;
38+
privatefinalRandomProviderrandomProvider;
3739

3840
staticsynchronizedRemoteServicegetRemoteService() {
3941
if (service ==null) {
@@ -42,24 +44,33 @@ static synchronized RemoteService getRemoteService() {
4244
returnservice;
4345
}
4446

45-
privateRemoteService() {}
47+
privateRemoteService() {
48+
this(Math::random);
49+
}
4650

51+
/**
52+
* This constuctor is used for testing purposes only.
53+
*/
54+
RemoteService(RandomProviderrandomProvider) {
55+
this.randomProvider =randomProvider;
56+
}
4757
/**
4858
* Remote function takes a value and multiplies it by 10 taking a random amount of time.
4959
* Will sometimes return -1. This imitates connectivity issues a client might have to account for.
5060
* @param value integer value to be multiplied.
51-
* @return if waitTime is more than 200ms, it returns value * 10, otherwise -1.
61+
* @return if waitTime is less than {@link RemoteService#THRESHOLD}, it returns value * 10,
62+
* otherwise {@link RemoteServiceInterface#FAILURE}.
5263
*/
5364
@Override
5465
publiclongdoRemoteFunction(intvalue) {
5566

56-
longwaitTime = (long)Math.floor(Math.random() *1000);
67+
longwaitTime = (long)Math.floor(randomProvider.random() *1000);
5768

5869
try {
5970
sleep(waitTime);
6071
}catch (InterruptedExceptione) {
6172
LOGGER.error("Thread sleep state interrupted",e);
6273
}
63-
returnwaitTime>=200 ?value *10 :-1;
74+
returnwaitTime<=THRESHOLD ?value *10 :FAILURE;
6475
}
6576
}

‎ambassador/src/main/java/com/iluwatar/ambassador/RemoteServiceInterface.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
* Interface shared by ({@link RemoteService}) and ({@link ServiceAmbassador}).
2727
*/
2828
interfaceRemoteServiceInterface {
29-
29+
intFAILURE = -1;
30+
3031
longdoRemoteFunction(intvalue)throwsException;
3132
}

‎ambassador/src/main/java/com/iluwatar/ambassador/ServiceAmbassador.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,15 @@ private long checkLatency(int value) {
5959
privatelongsafeCall(intvalue) {
6060

6161
intretries =0;
62-
longresult =-1;
62+
longresult =FAILURE;
6363

6464
for (inti =0;i <RETRIES;i++) {
6565

6666
if (retries >=RETRIES) {
67-
return-1;
67+
returnFAILURE;
6868
}
6969

70-
if ((result =checkLatency(value)) ==-1) {
70+
if ((result =checkLatency(value)) ==FAILURE) {
7171
LOGGER.info("Failed to reach remote: (" + (i +1) +")");
7272
retries++;
7373
try {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
packagecom.iluwatar.ambassador.util;
2+
3+
/**
4+
* An interface for randomness. Useful for testing purposes.
5+
*/
6+
publicinterfaceRandomProvider {
7+
doublerandom();
8+
}

‎ambassador/src/test/java/com/iluwatar/ambassador/ClientTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
importorg.junit.jupiter.api.Test;
2626

27+
importstaticorg.junit.jupiter.api.Assertions.assertTrue;
28+
2729
/**
2830
* Test for {@link Client}
2931
*/
@@ -35,6 +37,6 @@ public void test() {
3537
Clientclient =newClient();
3638
longresult =client.useService(10);
3739

38-
assertresult ==100 ||result == -1;
40+
assertTrue(result ==100 ||result == -1);
3941
}
4042
}

‎ambassador/src/test/java/com/iluwatar/ambassador/RemoteServiceTest.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,43 @@
2222
*/
2323
packagecom.iluwatar.ambassador;
2424

25+
importcom.iluwatar.ambassador.util.RandomProvider;
2526
importorg.junit.jupiter.api.Test;
2627

28+
importstaticorg.junit.jupiter.api.Assertions.assertEquals;
29+
importstaticorg.junit.jupiter.api.Assertions.assertTrue;
30+
2731
/**
2832
* Test for {@link RemoteService}
2933
*/
3034
publicclassRemoteServiceTest {
3135

3236
@Test
33-
publicvoidtest() {
34-
longresult =RemoteService.getRemoteService().doRemoteFunction(10);
35-
assertresult ==100 ||result == -1;
37+
publicvoidtestFailedCall() {
38+
RemoteServiceremoteService =newRemoteService(
39+
newStaticRandomProvider(0.21));
40+
longresult =remoteService.doRemoteFunction(10);
41+
assertEquals(RemoteServiceInterface.FAILURE,result);
42+
}
43+
44+
@Test
45+
publicvoidtestSuccessfulCall() {
46+
RemoteServiceremoteService =newRemoteService(
47+
newStaticRandomProvider(0.2));
48+
longresult =remoteService.doRemoteFunction(10);
49+
assertEquals(100,result);
50+
}
51+
52+
privateclassStaticRandomProviderimplementsRandomProvider {
53+
privatedoublevalue;
54+
55+
StaticRandomProvider(doublevalue) {
56+
this.value =value;
57+
}
58+
59+
@Override
60+
publicdoublerandom() {
61+
returnvalue;
62+
}
3663
}
3764
}

‎ambassador/src/test/java/com/iluwatar/ambassador/ServiceAmbassadorTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
importorg.junit.jupiter.api.Test;
2626

27+
importstaticorg.junit.jupiter.api.Assertions.assertTrue;
28+
2729
/**
2830
* Test for {@link ServiceAmbassador}
2931
*/
@@ -32,6 +34,6 @@ public class ServiceAmbassadorTest {
3234
@Test
3335
publicvoidtest() {
3436
longresult =newServiceAmbassador().doRemoteFunction(10);
35-
assertresult ==100 ||result ==-1;
37+
assertTrue(result ==100 ||result ==RemoteServiceInterface.FAILURE);
3638
}
3739
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp