考虑下面给出的代码:
@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
}
};
}
我正在尝试编写一个单元测试用例:
这就是我使用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,则调用实际的构造函数。
我想模拟构造函数调用,并将调用限制在实际的构造函数上。我该怎么做呢?
我无法编辑代码设计,因为这超出了我的范围。
简而言之,由于使用了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。 我有,它具有下面这样的函数,并且在构造函数中初始化了。 当我编写测试用例时,我模拟了,但是由于我们在一个方法中创建,我如何模拟,这样我就可以编写期望值,根据我在测试类中设置的选择获得值?