gpt4 book ai didi

java - 使用带有 PowerMock 和 Mockito 的 Protected Constructor 测试类

转载 作者:行者123 更新时间:2023-11-30 07:27:15 32 4
gpt4 key购买 nike

我要测试以下类(class):

public abstract class Challenge {
protected int id;
protected String name;
protected String question;

protected Challenge(){}

public String[] toStrings(){
String[] s = {Integer.toString(id), name, question};
return s;
}

...

但是使用这个测试:

@Test
public void testToStrings() throws Exception{

String[] expectedResult1 = new String[]{"1", "a", "b"};

String[] obtainedResult1 = null;

Challenge challengeMock = PowerMockito.mock(Challenge.class);
challengeMock.id = 1;
challengeMock.name = "a";
challengeMock.question = "b";

obtainedResult1 = challengeMock.toStrings();
Assert.assertEquals(expectedResult1[0], obtainedResult1[0]);
Assert.assertEquals(expectedResult1[1], obtainedResult1[1]);
Assert.assertEquals(expectedResult1[2], obtainedResult1[2]);
}

由于“obtainedResult1 = challengeMock.toStrings();”,我得到一个 NullPointerException返回 null。

我使用在 Robolectric 中运行的 PowerMock + Mockito 和规则(因为它是一个 Android 项目)。

@Rule
public PowerMockRule rule = new PowerMockRule();

问题出在哪里?

最佳答案

为此您不需要 PowerMock;一个 Mockito 模拟就可以了。但通常情况下,模拟在其方法中没有任何功能,这就是 toStrings() 未返回您期望的值的原因。要更改此设置,您需要 CALLS_REAL_METHODS 默认答案。

所以我的建议是将创建模拟的行(testToStrings 的第三个非空行)更改为类似这样的内容。

Challenge challengeMock = Mockito.mock(Challenge.class, Mockito.CALLS_REAL_METHODS );

我已经对此进行了测试,如果您进行此更改,您的测试就会通过。

关于java - 使用带有 PowerMock 和 Mockito 的 Protected Constructor 测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9861912/

32 4 0
文章推荐: java - 使用拆分时 Java 中的 ArrayIndexOutOfBoundsException
文章推荐: UTF-8 字符串的 java.lang.NumberFormatException
文章推荐: Java迷宫解决和强化学习
文章推荐: javascript - 如何让
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com