???????????????TDD?У?????????????????????????????д??????????????????????????????????????????????????????????????????е?С???????????????????????????????????????????????????γ???????????????????????У?????????????????????????ü?????????????????????????????????????С?????????????????????TDD?????????????????

?????????????????????γ?????е???Э????С??顣?????????е????С?????????????????????飩TDD??????????????????inside-out?????????????塣???????????????????????????????????TDD????????????????????????????????Э?????????????????????塣?????????????????????????????????????????????????γ??????????ж?????????????????????????????????????????????????????????????????飬????????????????????????е??????

?????????????·??????????????е????????????????????????д?????????????????????????鼰?佻?????????????????????????????????????γ????

???????磬???????????????????????????????????????????????????????????????????4λ????????????0??9?????????6?????3????4λ?????????????????????????4λ????????????????????4λ??????????????????????xAyB??????????????x????????????г????????????λ????????y????????????г????λ?ò????????????3??????????????????????????You win??????????????????????????You lose????

??????????????С???????????ü??????????????????????????????а?????????????????????????????????????????????????????????????????????飬?????????????????????飬??????????????????????????ò??????????????????????????????????????????????????

?????e????ο?????TDD???????????????????????????????????????????????????????????TDD????????????????????????????????????????ɡ?

?????????????????????????????4λ????????????У?You win???????????

??????????д???????ɡ???????????Game????????????start????

Game game =newGame();
game.start();

????????????????????????????????????????????AnswerGenerator???????????????????????InputCollector??????????????????ж??????????Guesser?????????????????????OutputPrinter?????????????????????????????????????????mock???????????????????????Щ?????????????????JMock2??

Mockery context = new JUnit4Mockery() {                      
    {                                             
        setImposteriser(ClassImposteriser.INSTANCE);
    }                                             
};                                                
final AnswerGenerator answerGenerator = context.mock(AnswerGenerator.class);
????????
?????????????????Game?????????????

Game game =newGame(answerGenerator?? inputCollector?? guesser?? outputPrinter);
game.start();


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

public class AnswerGenerator {
  
}

public class InputCollector {
  
}

public class Guesser {
  
}

public class OutputPrinter {
  
}
 
???????????????????????Game????汾??

public class Game {
    public Game(AnswerGenerator generator?? InputCollector inputCollector?? Guesser guesser?? OutputPrinter outputPrinter) {
      
    }
  
    public void start() {
      
    }
}

?????????????????????????????????????????????answerGenerator???????4λ?????????????1234??

context.checking(new Expectations() {  
    {                                  
        one(answerGenerator).generate();
        will(returnValue("1234"));     
    }
});

????????????????generator?????generate???????????????????????

public class AnswerGenerator {
    public String generate() {
        return null;
    }
}
????????????????????β???1234??

context.checking(new Expectations() {                  
                                                   
    // ...
                                                   
    {                                                  
        one(inputCollector).guess();                   
        will(returnValue("1234"));                     
    }                                                  
??
????????????????????inputCollector??????????guess??????

public class InputCollector {
    public String guess() {
        return null;
    }
}
???????guesser?ж??????????????????????4A0B??

context.checking(new Expectations() {                  

    // ...                                              
                                                       
    {                                                  
        oneOf(guesser).verify(with(equal("1234"))?? with(equal("1234")));                   
        will(returnValue("4A0B"));                     
    }                                                 
}
 
?????????????????guesser???????????

public class Guesser {
    public String verify(String input?? String answer) {
        return null;
    }
}

????????????????????You win????game over??

context.checking(new Expectations() {  

    // ...

    {                                  
        oneOf(outputPrinter).print(with(equal("You win")));    
    }                                  
??