如何在@Before方法中将JMockit模拟属性设置为测试对象?

时间:2016-10-27 08:42:15

标签: java testing jmockit

在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方法。

1 个答案:

答案 0 :(得分:3)

您可以配置@Tested字段,以便在任何@Before方法运行之前对其进行初始化:

@Tested(availableDuringSetup = true)
private PromotionsAddOrUpdateEntryStrategy strategy;

有关详细信息,请参阅API documentation

但是,有一个更简单的解决方案,因为最近添加了@Injectable注入List的支持(版本1.28)。 因此,以下内容应该有效,不需要@Before方法:

@Tested PromotionsAddOrUpdateEntryStrategy strategy;
@Injectable AddOrUpdateEntryCommand precommand;