在JMockit测试中,我有以下代码:
@Tested
private PromotionsAddOrUpdateEntryStrategy strategy;
@Mocked
private BuyXGetYPromoPreAddOrUpdateEntryCommand precommand;
@Before
public void setUp()
{
initializeCommands(precommand);
}
protected void initializeCommands(final BuyXGetYPromoPreAddOrUpdateEntryCommand command)
{
final List<AddOrUpdateEntryCommand> commands = new ArrayList<>();
commands.add(command);
strategy.setPrecommands(commands);
}
执行测试时,我在NullPointerException
对象中得到strategy
。为什么会这样?这样做的正确方法是什么?我们的想法是避免在所有测试中重复initializeCommands
方法。
答案 0 :(得分:3)
您可以配置@Tested
字段,以便在任何@Before
方法运行之前对其进行初始化:
@Tested(availableDuringSetup = true)
private PromotionsAddOrUpdateEntryStrategy strategy;
有关详细信息,请参阅API documentation。
但是,有一个更简单的解决方案,因为最近添加了@Injectable
注入List
的支持(版本1.28)。
因此,以下内容应该有效,不需要@Before
方法:
@Tested PromotionsAddOrUpdateEntryStrategy strategy;
@Injectable AddOrUpdateEntryCommand precommand;