Java 模拟在其他类中创建对象

Java 模拟在其他类中创建对象,java,unit-testing,mockito,powermockito,Java,Unit Testing,Mockito,Powermockito,我试图在我的控制器中测试方法,其中一个类在其中创建了如下对象: NewPaymentModel pModel = new NewPaymentModel(); 那么我有一个if声明: if (pModel.getErrors().isEmpty()) { 这正是我想嘲弄的。我的代码如下: Pr4Error error = Mockito.mock(Pr4Error.class); List<Pr4Error> listOfErrors = new ArrayList<

我试图在我的控制器中测试方法,其中一个类在其中创建了如下对象:

  NewPaymentModel pModel = new NewPaymentModel();
那么我有一个if声明:

  if (pModel.getErrors().isEmpty()) {
这正是我想嘲弄的。我的代码如下:

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);
Pr4Error error=Mockito.mock(Pr4Error.class);
List listOfErrors=new ArrayList();
添加错误列表(错误);
最终新付款模式pModel=
mock(NewPaymentModel.class,Mockito.RETURNS\u DEEP\u STUBS);
PowerMockito.whenNew(NewPaymentModel.class).withNoArguments()。
然后返回(pModel);
Mockito.doReturn(pModel).when(facade).addNewPayment(pModel);
当(pModel.getErrors().isEmpty())。然后返回(true);
编辑
我在运行单元测试时得到的是最后一行代码上的nullpointerexception。

已经给出了直接答案。基本上,代码必须符合各种先决条件;例如,您需要使用@PrepareForTest注释(这样power magic就可以开始操作生产类的字节码)


真正的答案是:当您编写自己的代码时,只需编写易于测试的代码即可。开始含义:例如,您可以为此类对象注入工厂,而不是在生产代码中调用
new
。那家工厂可以用“正常”的方式来嘲弄。你对模仿
的需求消失了;您可以摆脱PowerMock(ito)。。。并最终得到更好的设计生产代码

谢谢你的回答,但我现在无法更改代码。我通过构造函数理解工厂和依赖注入的概念。另外,我还有@PrepareForestAnnotation。。。不过,它还是不起作用。那么,第一个链接很可能就起作用了。Mocking new有很好的文档记录,而且它工作得很好——只要您完全按照文档进行操作。如果你认为你是;但它仍然不起作用,我们需要一个解决方案。你的投入不够;因为它没有显示如何使用该注释。