【发布时间】:2021-09-24 13:57:50
【问题描述】:
我正在尝试编写一个比较字符串相等性的测试。
这是应该测试的类的代码sn-p
package ge.jibo.util;
public class TextManager {
private String concatenateTwoString(String t1, String t2) {
return t1 + t2;
}
public String concatenate(String t1, String t2) {
return concatenateTwoString(t1, t2);
}
}
这是一个测试类
package ge.jibo.util;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import static org.assertj.core.api.Assertions.assertThat;
public class TextManagerTest {
@Test
@PrepareForTest(TextManager.class)
void checkIfConcatenationWorks() throws Exception {
TextManager textmanager = PowerMockito.spy(new TextManager());
PowerMockito.doReturn("someText").when(textmanager,"concatenateTwoString", Mockito.anyString(), Mockito.anyString());
String text = textmanager.concatenate("ji","bo");
assertThat(text).isEqualTo("jibo");
}
}
如你所见,我想测试公共方法concatenate,它在同一个类中调用私有方法concatenateTwoString。
这个想法是我想为私有方法创建一个模拟对象,并且无论何时从公共方法调用它都应该返回常量值"someText"
但它从私有方法 concatenateTwoString 返回 null 而不是 "someText"。
org.opentest4j.AssertionFailedError:
Expecting:
<null>
to be equal to:
<"jibo">
but was not.
Expected :jibo
Actual :null
有人知道如何解决吗?
依赖版本:
- junit-jupiter - 5.7.2
- junit-platform-launcher - 1.8.1
- 模拟核心 - 3.12.4
- mockito-junit-jupiter - 3.12.4
- powermock-core - 2.0.9
- powermock-api-mockito2 - 2.0.9
【问题讨论】:
标签: unit-testing mocking mockito junit5 powermock