?????????outputPrinter?????????μ??????

public class OutputPrinter {
    public void print(String result) {

    }
}
??????????????Expectation?????

context.assertIsSatisfied();


????????????????????????????????????

@Test                                                                            
 public void should_play_game_and_win() {                                         
     Mockery context = new JUnit4Mockery() {                                      
         {                                                                        
             setImposteriser(ClassImposteriser.INSTANCE);                         
         }                                                                        
     };                                                                           
     final AnswerGenerator answerGenerator = context.mock(AnswerGenerator.class); 
     final InputCollector inputCollector = context.mock(InputCollector.class);    
     final Guesser guesser = context.mock(Guesser.class);                         
     final OutputPrinter outputPrinter = context.mock(OutputPrinter.class);       
                                                                                  
     context.checking(new Expectations() {                                        
         {                                                                        
             one(answerGenerator).generate();                                     
             will(returnValue("1234"));                                           
         }                                                                        
                                                                                  
         {                                                                        
             one(inputCollector).guess();                                         
             will(returnValue("1234"));                                           
         }                                                                        
                                                                                  
         {                                                                        
             oneOf(guesser).verify(with(equal("1234"))?? with(equal("1234")));     
             will(returnValue("4A0B"));                                           
         }                                                                        
                                                                                  
         {                                                                        
             oneOf(outputPrinter).print(with(equal("You win")));                  
         }                                                                        
     });                                                                          
                                                                                  
     Game game = new Game(answerGenerator?? inputCollector?? guesser?? outputPrinter);
     game.start();                                                                
                                                                                  
     context.assertIsSatisfied();                                                 
 }

???????в?????????????????????

java.lang.AssertionError: not all expectations were satisfied

expectations:
expected once?? never invoked: answerGenerator.generate(); returns "1234"
expected once?? never invoked: inputCollector.guess(); returns "1234"
expected once?? never invoked: guesser.verify("1234"); returns "4A0B"
expected once?? never invoked: outputPrinter.print("You win"); returns a default value
at org.jmock.lib.AssertionErrorTranslator.translate(AssertionErrorTranslator.java:20)
at org.jmock.Mockery.assertIsSatisfied(Mockery.java:196)
at com.swzhou.tdd.guess.number.GameFacts.should_play_game_and_win(GameFacts.java:54)
 
??????????????????????????????????????????????ж?????????????????????????game.start()??????????????ò??????????????аɡ?

???????????????Game?????????????Э?????????Game????Σ?

private AnswerGenerator answerGenerator;
private InputCollector inputCollector;
private Guesser guesser;
private OutputPrinter outputPrinter;

public Game(AnswerGenerator answerGenerator?? InputCollector inputCollector?? Guesser guesser?? OutputPrinter outputPrinter) {
     this.answerGenerator = answerGenerator;
     this.inputCollector = inputCollector;
     this.guesser = guesser;
     this.outputPrinter = outputPrinter;
}
 
?????????start?????????answerGenerator?????????4λ????

public void start() {                         
    String answer = answerGenerator.generate();
}

????????????????????????????б仯?????????????????

java.lang.AssertionError: not all expectations were satisfied
expectations:
expected once?? already invoked 1 time: answerGenerator.generate(); returns "1234"
expected once?? never invoked: inputCollector.guess(); returns "1234"
expected once?? never invoked: guesser.verify("1234"); returns "4A0B"
expected once?? never invoked: outputPrinter.print("You win"); returns a default value
at org.jmock.lib.AssertionErrorTranslator.translate(AssertionErrorTranslator.java:20)
at org.jmock.Mockery.assertIsSatisfied(Mockery.java:196)
at com.swzhou.tdd.guess.number.GameFacts.should_play_game_and_win(GameFacts.java:54)
 
??????????????inputCollector?????????????

public void start() {                         
    String answer = answerGenerator.generate();
    String guess = inputCollector.guess();    
}

??????????????????????????????????????????????

 java.lang.AssertionError: not all expectations were satisfied
expectations:
expected once?? already invoked 1 time: answerGenerator.generate(); returns "1234"
expected once?? already invoked 1 time: inputCollector.guess(); returns "1234"
expected once?? never invoked: guesser.verify("1234"); returns "4A0B"
expected once?? never invoked: outputPrinter.print("You win"); returns a default value
at org.jmock.lib.AssertionErrorTranslator.translate(AssertionErrorTranslator.java:20)
at org.jmock.Mockery.assertIsSatisfied(Mockery.java:196)
at com.swzhou.tdd.guess.number.GameFacts.should_play_game_and_win(GameFacts.java:54)
 
?????????????????????е????????μ???????????

public void start() {                         
    String answer = answerGenerator.generate();
    String guess = inputCollector.guess();    
    String result = "";                       
    do {                                      
       result = guesser.verify(guess?? answer);
    } while (result != "4A0B");               
    outputPrinter.print("You win");           
}

??????????????????????????????Υ??С???????

????????????????????С??????????С???????????????????

????1??????????????????????????????????????????

????2????????????????????????Game.start????

????3????????ù???Э???????????????????????????????????

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ɡ???????????????д????????????????????????????翼?????????μ???????????????????????????????????????СЭ?????У???????TDD???????????Э?????????????Σ????????????????????????????????