Design patterns 单元测试中工厂/抽象工厂设计模式的使用
有人告诉我,用于编写单元测试用例的工厂/抽象工厂设计模式非常有效,但我还没有找到任何教程能够清楚地说明这一点。因此,如果有人能给我指出任何现有的教程,或者在这里给我一些伪代码和解释,那将是非常有帮助的:)根据GoF的说法,抽象工厂模式的意图是提供一个接口,用于创建相关或从属对象的族,而无需指定它们的conrcete类 在框架中,抽象工厂通常使用依赖注入提供,这是编写易于测试的代码的真正关键。依赖项注入只是意味着依赖项通过构造函数“注入”,而不是在类中更新 假设您使用两个工厂为简单和困难的双陆棋游戏生成依赖项(这里只有一个依赖项,骰子):Design patterns 单元测试中工厂/抽象工厂设计模式的使用,design-patterns,junit,factory,abstract-factory,Design Patterns,Junit,Factory,Abstract Factory,有人告诉我,用于编写单元测试用例的工厂/抽象工厂设计模式非常有效,但我还没有找到任何教程能够清楚地说明这一点。因此,如果有人能给我指出任何现有的教程,或者在这里给我一些伪代码和解释,那将是非常有帮助的:)根据GoF的说法,抽象工厂模式的意图是提供一个接口,用于创建相关或从属对象的族,而无需指定它们的conrcete类 在框架中,抽象工厂通常使用依赖注入提供,这是编写易于测试的代码的真正关键。依赖项注入只是意味着依赖项通过构造函数“注入”,而不是在类中更新 假设您使用两个工厂为简单和困难的双陆棋游
public class EasyGameFactory implements GameFactory
{
Dice createDice()
{
return new LuckyDice();
}
}
public class NormalGameFactory implements GameFactory
{
Dice createDice()
{
return new RandomDice();
}
}
出于单元测试的目的,您确实更愿意使用这两种Dice实现,因此您编写了GameFactory的一个特殊实现:
public class CustomGameFactory implements GameFactory
{
private Dice mDice;
public CustomGameFactory(Dice dice)
{
mDice = dice;
}
Dice createDice()
{
return mDice;
}
}
该工厂不必是生产代码树的一部分。您通过测试代码向工厂提供Dice的特殊实现:
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());
}
}
使用这种方法,可以为测试目的注入任何具体的依赖项。但是,通常在没有抽象工厂的情况下也可以实现同样的功能,即,可以注入依赖项本身,而不是注入工厂