Last active
August 29, 2015 17:37
-
-
Save up1/117c48d2402f44a19536 to your computer and use it in GitHub Desktop.
FizzBuzz with Dependency Injection
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class CowBoyFizzBuzz { | |
public static void main(String[] args) { | |
for (int number = 1; number <= 100; number++) { | |
if (number % 15 == 0) { | |
System.out.println("FizzBuzz"); | |
} else if (number % 5 == 0) { | |
System.out.println("Buzz"); | |
} else if (number % 3 == 0) { | |
System.out.println("Fizz"); | |
} else { | |
System.out.println(number); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class FizzBuzzDITest { | |
private boolean isCalled = false; | |
@Mock | |
TextProvider textProvider; | |
@Mock | |
Printer printer; | |
@Before | |
public void init() { | |
MockitoAnnotations.initMocks(this); | |
} | |
@Test | |
public void getNumbersFromNumberProvider() throws Exception { | |
MyFizzBuzz myFizzBuzz = new MyFizzBuzz(); | |
myFizzBuzz.setNumberProvider(new NumberProvider() { | |
public Stream<Integer> getNumbers() { | |
isCalled = true; | |
return IntStream.rangeClosed(1, 3).boxed(); | |
} | |
}); | |
myFizzBuzz.setTextProvider(textProvider); | |
myFizzBuzz.setPrinter(printer); | |
myFizzBuzz.startProcess(); | |
assertTrue(isCalled); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class FizzBuzzDITest { | |
private boolean isCalled = false; | |
@Mock | |
TextProvider textProvider; | |
@Mock | |
Printer printer; | |
@Before | |
public void init() { | |
MockitoAnnotations.initMocks(this); | |
} | |
@Test | |
public void generatedMessage() { | |
MyFizzBuzz myFizzBuzz = new MyFizzBuzz(); | |
myFizzBuzz.setNumberProvider(new NumberProvider() { | |
public Stream<Integer> getNumbers() { | |
return IntStream.rangeClosed(1, 3).boxed(); | |
} | |
}); | |
myFizzBuzz.setTextProvider(textProvider); | |
myFizzBuzz.setPrinter(printer); | |
myFizzBuzz.startProcess(); | |
InOrder order = Mockito.inOrder(textProvider); | |
order.verify(textProvider).getText(1); | |
order.verify(textProvider).getText(2); | |
order.verify(textProvider).getText(3); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class FizzBuzzDITest { | |
private boolean isCalled = false; | |
@Mock | |
TextProvider textProvider; | |
@Mock | |
Printer printer; | |
@Before | |
public void init() { | |
MockitoAnnotations.initMocks(this); | |
} | |
@Test | |
public void printedMessage() { | |
MyFizzBuzz myFizzBuzz = new MyFizzBuzz(); | |
myFizzBuzz.setNumberProvider(new NumberProvider() { | |
public Stream<Integer> getNumbers() { | |
return IntStream.rangeClosed(1, 3).boxed(); | |
} | |
}); | |
myFizzBuzz.setTextProvider(new TextProvider(){ | |
public String getText(int number) { | |
return "xx" + String.valueOf(number); | |
} | |
}); | |
myFizzBuzz.setPrinter(printer); | |
myFizzBuzz.startProcess(); | |
InOrder order = Mockito.inOrder(printer); | |
order.verify(printer).print("xx1"); | |
order.verify(printer).print("xx2"); | |
order.verify(printer).print("xx3"); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MyFizzBuzz { | |
private NumberProvider numberProvider; | |
private TextProvider textProvider; | |
private Printer printer; | |
public void setNumberProvider(NumberProvider numberProvider) { | |
this.numberProvider = numberProvider; | |
} | |
public void setTextProvider(TextProvider textProvider) { | |
this.textProvider = textProvider; | |
} | |
public void startProcess() { | |
this.numberProvider.getNumbers(); | |
} | |
public void setPrinter(Printer printer) { | |
this.printer = printer; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MyFizzBuzz { | |
private NumberProvider numberProvider; | |
private TextProvider textProvider; | |
private Printer printer; | |
public void setNumberProvider(NumberProvider numberProvider) { | |
this.numberProvider = numberProvider; | |
} | |
public void setTextProvider(TextProvider textProvider) { | |
this.textProvider = textProvider; | |
} | |
public void startProcess() { | |
this.numberProvider.getNumbers().forEach( number-> { | |
this.textProvider.getText(number); | |
}); | |
} | |
public void setPrinter(Printer printer) { | |
this.printer = printer; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MyFizzBuzz { | |
private NumberProvider numberProvider; | |
private TextProvider textProvider; | |
private Printer printer; | |
public void setNumberProvider(NumberProvider numberProvider) { | |
this.numberProvider = numberProvider; | |
} | |
public void setTextProvider(TextProvider textProvider) { | |
this.textProvider = textProvider; | |
} | |
public void startProcess() { | |
this.numberProvider.getNumbers().forEach( number-> { | |
String message = this.textProvider.getText(number); | |
this.printer.print(message); | |
}); | |
} | |
public void setPrinter(Printer printer) { | |
this.printer = printer; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class NumberProvider { | |
public Stream<Integer> getNumbers() { | |
return IntStream.rangeClosed(1, 100).boxed(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class NumberProviderTest { | |
@Test | |
public void numberStartWithOne() { | |
NumberProvider numberProvider = new NumberProvider(); | |
Stream<Integer> numbers = numberProvider.getNumbers(); | |
assertEquals(1, numbers.findFirst().get().intValue()); | |
} | |
@Test | |
public void checkSize() { | |
NumberProvider numberProvider = new NumberProvider(); | |
Stream<Integer> numbers = numberProvider.getNumbers(); | |
assertTrue(numbers.count() == 100); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Printer { | |
public void print(String message) { | |
System.out.println(message); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class PrinterTest { | |
@Test | |
public void printMessageToConsole() { | |
String message = "1"; | |
Printer printer = new Printer(); | |
ByteArrayOutputStream expectedOutput = new ByteArrayOutputStream(); | |
System.setOut(new PrintStream(expectedOutput)); | |
printer.print(message); | |
assertEquals(expectedOutput.toString().trim(), message); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class TextProvider { | |
public String getText(int number) { | |
if(dividable(number, 15)) { | |
return "FizzBuzz"; | |
} | |
if(dividable(number, 3)) { | |
return "Fizz"; | |
} | |
if(dividable(number, 5)) { | |
return "Buzz"; | |
} | |
return String.valueOf(number); | |
} | |
private boolean dividable(int number, int divider) { | |
return number % divider == 0; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class TextProviderTest { | |
@Test | |
public void sameInput() { | |
TextProvider textProvider = new TextProvider(); | |
String actualResult = textProvider.getText(1); | |
assertEquals("1", actualResult); | |
} | |
@Test | |
public void devideByThreeShouldBeFizz() { | |
TextProvider textProvider = new TextProvider(); | |
String actualResult = textProvider.getText(3); | |
assertEquals("Fizz", actualResult); | |
} | |
@Test | |
public void devideByFiveShouldBeBuzz() { | |
TextProvider textProvider = new TextProvider(); | |
String actualResult = textProvider.getText(5); | |
assertEquals("Buzz", actualResult); | |
} | |
@Test | |
public void devideByThreeAndFiveShouldBeFizzBuzz() { | |
TextProvider textProvider = new TextProvider(); | |
String actualResult = textProvider.getText(15); | |
assertEquals("FizzBuzz", actualResult); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment