Add proper unit tests for composite pattern
This commit is contained in:
parent
c837ffe234
commit
94f80d1868
@ -0,0 +1,90 @@
|
|||||||
|
package com.iluwatar.composite;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date: 12/11/15 - 8:12 PM
|
||||||
|
*
|
||||||
|
* @author Jeroen Meulemeester
|
||||||
|
*/
|
||||||
|
public class MessengerTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The buffer used to capture every write to {@link System#out}
|
||||||
|
*/
|
||||||
|
private ByteArrayOutputStream stdOutBuffer = new ByteArrayOutputStream();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Keep the original std-out so it can be restored after the test
|
||||||
|
*/
|
||||||
|
private final PrintStream realStdOut = System.out;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inject the mocked std-out {@link PrintStream} into the {@link System} class before each test
|
||||||
|
*/
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
this.stdOutBuffer = new ByteArrayOutputStream();
|
||||||
|
System.setOut(new PrintStream(stdOutBuffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removed the mocked std-out {@link PrintStream} again from the {@link System} class
|
||||||
|
*/
|
||||||
|
@After
|
||||||
|
public void tearDown() {
|
||||||
|
System.setOut(realStdOut);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the message from the orcs
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMessageFromOrcs() {
|
||||||
|
final Messenger messenger = new Messenger();
|
||||||
|
testMessage(
|
||||||
|
messenger.messageFromOrcs(),
|
||||||
|
"Where there is a whip there is a way."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the message from the elves
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testMessageFromElves() {
|
||||||
|
final Messenger messenger = new Messenger();
|
||||||
|
testMessage(
|
||||||
|
messenger.messageFromElves(),
|
||||||
|
"Much wind pours from your mouth."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if the given composed message matches the expected message
|
||||||
|
*
|
||||||
|
* @param composedMessage The composed message, received from the messenger
|
||||||
|
* @param message The expected message
|
||||||
|
*/
|
||||||
|
private void testMessage(final LetterComposite composedMessage, final String message) {
|
||||||
|
// Test is the composed message has the correct number of words
|
||||||
|
final String[] words = message.split(" ");
|
||||||
|
assertNotNull(composedMessage);
|
||||||
|
assertEquals(words.length, composedMessage.count());
|
||||||
|
|
||||||
|
// Print the message to the mocked stdOut ...
|
||||||
|
composedMessage.print();
|
||||||
|
|
||||||
|
// ... and verify if the message matches with the expected one
|
||||||
|
assertEquals(message, new String(this.stdOutBuffer.toByteArray()).trim());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user