2011-09-21 3 views
5

단위 테스트 사례 작성을위한 공장/초록 공장 디자인 패턴은 매우 효과적이지만 분명히 설명하는 자습서는 찾을 수 없었습니다. 누군가가 기존의 튜토리얼 날 지점 또는 나에게 여기에 몇 가지 의사 코드 및 설명 : GoF의에 따르면단위 테스트에서 공장/초록 팩토리 디자인 패턴 사용

답변

6

을 줄 수 있다면 그래서 매우 도움이 될 것이라고 추상 팩토리 패턴의 의도을 만들기위한 인터페이스를 제공하는 것입니다 컨실 트 클래스를 지정하지 않고 관련 객체 또는 종속 객체의 패밀리.

프레임 워크에서 추상 팩토리는 일반적으로 종속성 삽입을 사용하여 제공되며 이는 테스트하기 쉬운 코드를 작성하는 실제 키입니다. 의존성 삽입은 의존성이 클래스 내부에서 새로 생성되기보다는 생성자를 통해 "주입"된다는 것을 의미합니다.

public class EasyGameFactory implements GameFactory 
{ 
    Dice createDice() 
    { 
    return new LuckyDice(); 
    } 
} 

public class NormalGameFactory implements GameFactory 
{ 
    Dice createDice() 
    { 
    return new RandomDice(); 
    } 
} 

하는 단위 테스트를 위해 당신이 정말로 주사위 구현도를 사용하는 것을 선호 :

는 주사위 놀이의 쉽고 어려운 게임 (여기에 하나 개의 의존성, 주사위) 종속성을 생산하는 두 개의 공장을 사용한다고 가정 따라서 GameFactory의 특별한 구현을 작성하십시오 :

public class CustomGameFactory implements GameFactory 
{ 
    private Dice mDice; 

    public CustomGameFactory(Dice dice) 
    { 
    mDice = dice; 
    } 

    Dice createDice() 
    { 
    return mDice; 
    } 
} 

이 팩토리는 프로덕션 코드 트리의 일부일 필요는 없습니다. 당신은 테스트 코드를 통해 주사위의 특별한 구현 공장 공급 : 어떤 구체적인 의존성 테스트 목적으로 주입 할 수있는이 방법으로

public class TestBackgammon 
{ 
    @Test public void shouldReturnDiceThrown() 
    { 
    SettableDice dice = new SettableDice(); 
    Game game = new GameImpl(new CustomGameFactory(dice)); 

    dice.setDice(new int[] {4, 5}); 
    game.nextTurn(); 
    assertArrayEquals(new int[] {4, 5}, game.diceThrown()); 
    } 
} 

. 그러나 추상 팩토리 없이는 동일한 작업을 수행 할 수 있습니다. 즉, 팩토리를 주입하는 대신 종속성 자체를 주입 할 수 있습니다.

관련 문제