当前位置: 首页 > 知识库问答 >
问题:

使用powermockito模拟参数化构造函数

微生耘豪
2023-03-14

考虑下面给出的代码:

@Override
public void A()  {
    objectA = objectB.B();
    objectA.C(someValue);
        objectC = new constructor(objectA,callback());
        //Rest of the code
    }

}
public Callback callback() {
    return new callback() {
        @Override
        public void someMethod(someArgument) {
            //some Code         
       }
    };
}

我正在尝试编写一个单元测试用例:

    < li >调用< code >对象b。B()必须被嘲笑 < li >必须模拟对构造函数的调用

这就是我使用Mockito和Powermockito所做的:

@InjectMocks
ClassBeingTested testObject;

@Mock
ClassB objectB;  

@Mock
ClassC objectC;    

@Before()
public void setup()  {
    when(objectB.B()).thenReturn(new ObjectA("someValue"));

    whenNew(objectC.class).withArguments(any(),any()).thenReturn(objectC);

}
@Test()
public void testMethod() {
    testObject.A();

}

第一个模拟成功工作,但第二个模拟使用 whenNew 失败,并出现以下错误:

org.powermock.reflect.exceptions.ConstructorNotFoundException:在ClassC类中找不到参数类型的构造函数:[null]

如果我使用< code>withArguments(objectA,callback()),其中我在测试类中实现了callback,则调用实际的构造函数。

我想模拟构造函数调用,并将调用限制在实际的构造函数上。我该怎么做呢?

我无法编辑代码设计,因为这超出了我的范围。

共有1个答案

屈升
2023-03-14

简而言之,由于使用了2个通用any()匹配器,您会收到错误。

当您使用<code>时,.with参数(…)时,它意味着<code>。withArguments(null,null)(因为any()可能匹配几乎任何东西,包括null),最终折叠为单个null,反射api(PowerMock严重依赖)无法为ClassC(null)找到合适的构造函数。

您可以查看 org.powermock.api.mockito.internal.expect.AbstractConstructorExpectationSetup 的来源

要解决此问题,请考虑使用<code>。withAnyArguments()

 类似资料:
  • 问题内容: 我正在尝试第一次使用PowerMockito模拟类构造函数,但是它不起作用。我当前的代码是: 测试失败,因为返回的值为“ Fail”。我的问题在哪里? 问题答案: Okey,找到答案了,您需要致电 代替

  • 问题内容: 我的课如下: 在构造函数中的逻辑和是我试图嘲弄的事情。我想要任何调用:返回一个虚拟字符串。 我试过了: 但这似乎不起作用。仍在执行构造函数逻辑,而不是获取的模拟对象。 问题答案: 您发布的代码适用于最新版本的Mockito和Powermockito。也许您还没有准备A?试试这个: A.java MockA.java 两项测试均应通过Mockito 1.9.0,powermockito

  • 我有以下课程布局: 我正在为服务创建一个单元测试,但我想将ServiceHelper用作一个“活动”类,但要模拟ServiceHelper中的构造函数参数。有没有办法通过Mockito实现这一点?

  • 问题内容: 我想将构造函数模拟为方法。 在我的测试中,我想做这样的事情: 但是给我这个 错误 知道为什么吗? 问题答案: 您可以使用PowerMock模拟构造函数。 如果由于某种原因而无法使用PowerMock,则最可行的解决方案是将工厂注入到包含此方法的任何类中。然后,您将使用工厂创建对象并模拟工厂。

  • 我有一个带有私有构造函数的单例类,我想为此编写单元测试。 如何使用mockito框架模拟具有私有构造函数的类。 谢谢

  • 我正在为我的java类编写测试类。我将Junit5与Mockito一起使用。 我使用的Junit5与Power Mockito不兼容,所以我只使用Mockito。 我有,它具有下面这样的函数,并且在构造函数中初始化了。 当我编写测试用例时,我模拟了,但是由于我们在一个方法中创建,我如何模拟,这样我就可以编写期望值,根据我在测试类中设置的选择获得值?