gpt4 book ai didi

java - 在其他类中模拟创建对象

转载 作者:行者123 更新时间:2023-12-02 12:44:39 24 4
gpt4 key购买 nike

我正在尝试测试 Controller 内的方法,其中一个类在其中创建了对象,如下所示:

  NewPaymentModel pModel = new NewPaymentModel();

然后我有 if 语句:

  if (pModel.getErrors().isEmpty()) {

这正是我想要 mock 的。我的代码如下:

Pr4Error error = Mockito.mock(Pr4Error.class);
List<Pr4Error> listOfErrors = new ArrayList<>();
listOfErrors.add(error);

final NewPaymentModel pModel =
PowerMockito.mock(NewPaymentModel.class, Mockito.RETURNS_DEEP_STUBS);

PowerMockito.whenNew(NewPaymentModel.class).withNoArguments().
thenReturn(pModel);

Mockito.doReturn(pModel).when(facade).addNewPayment(pModel);
when(pModel.getErrors().isEmpty()).thenReturn(true);

编辑。运行单元测试时我得到的是最后一行代码的 nullpointerException。

最佳答案

已经给出直接答案 here 。基本上,您的代码必须满足各种先决条件;例如,您需要使用 @PrepareForTest 注释(这样强大魔法就可以操纵生产类的字节代码)。

真正的答案是:当您编写自己的代码时,只需编写易于测试的代码即可。开始here 。含义:您可以为此类对象依赖注入(inject)工厂,而不是在生产代码中调用 new 。可以用“正常”方式 mock 该工厂。并且您对模拟 new 的需求消失了;您可以摆脱 PowerMock(ito) ...并最终获得更好设计的生产代码!

关于java - 在其他类中模拟创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44819708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com