How to mock a call of an inner method from a Junit(如何模拟从 Junit 调用内部方法)
问题描述
我有 MyClass,我正在为每个方法做一个测试类 (Method1Test)
I have MyClass and I am doing a test-class for every method (Method1Test)
public class MyClass {
public int method1(){
int a = method2();
return a;
}
public int method2(){
return 0;
}
}
@RunWith(MockitoJUnitRunner.class)
public class Method1Test {
@InjectMocks
private MyClass myClass = new MyClass();
@Before
public void setup(){}
@Test
public void test01(){
Mockito.when(myClass.method2()).thenReturn(25);
int a = myClass.method1();
assertTrue("We did it!!!",a==25);
}
}
问题是我无法模拟对 method2 的调用以使其返回不同的值.Mockito 语句不起作用.
The problem is that I am not able to mock the call to method2 to make it return a diferent value. The Mockito sentence don't do the work.
非常感谢^_^
推荐答案
你必须在被测类上创建一个 spy 并通过重新定义 method2() 的行为来部分模拟它
间谍
You have to create a spy on the class-under-test and partially mock it by redefining the behavior for the method2()
of the spy
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
public class Method1Test {
private MyClass myClass = new MyClass();
@Test
public void test01(){
//given
MyClass spy = spy(myClass); //create a spy for class-under-test
when(spy.method2()).thenReturn(25); //partially override behavior of the spy
//when
int a = spy.method1(); //make the call to method1 of the _spy_!
//then
assertEquals(25, a);
}
}
除此之外,您既不需要 Mockito Runner 也不需要 @InjectMocks
进行测试,因为您没有将 @Mock
带注释的模拟注入到被测类.
Apart from this, you don't require neither the Mockito Runner nor the @InjectMocks
for your test as you're doing no injection of @Mock
annotated mocks into the class-under-test.
此外,assertTrue
语句中的消息仅在断言的条件 NOT 满足时才会显示.所以应该是至少我们失败了!!!";)
Further, the message in the assertTrue
statement is only displayed, when the condition of the assertion is NOT fulfilled. So it should be at least "We failed!!!" ;)
这篇关于如何模拟从 Junit 调用内部方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何模拟从 Junit 调用内部方法
基础教程推荐
- 如何使用 Java 创建 X509 证书? 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 降序排序:Java Map 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01