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

How to set in JMockit mocked properties to tested object on @Before method?

在 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);
}

执行测试时,我在strategy 对象中得到一个NullPointerException。为什么会这样?正确的方法是什么?这个想法是为了避免在所有测试中重复使用 initializeCommands 方法。

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

@Tested(availableDuringSetup = true)
private PromotionsAddOrUpdateEntryStrategy strategy;

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

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

@Tested PromotionsAddOrUpdateEntryStrategy strategy;
@Injectable AddOrUpdateEntryCommand precommand;