如何模拟从 Junit 调用内部方法

2023-05-02Java开发问题
3

本文介绍了如何模拟从 Junit 调用内部方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我有 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 调用内部方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

如何使用 JAVA 向 COM PORT 发送数据?
How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)...
2024-08-25 Java开发问题
21

如何使报表页面方向更改为“rtl"?
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)...
2024-08-25 Java开发问题
19

在 Eclipse 项目中使用西里尔文 .properties 文件
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)...
2024-08-25 Java开发问题
18

有没有办法在 Java 中检测 RTL 语言?
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)...
2024-08-25 Java开发问题
11

如何在 Java 中从 DB 加载资源包消息?
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)...
2024-08-25 Java开发问题
13

如何更改 Java 中的默认语言环境设置以使其保持一致?
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)...
2024-08-25 Java开发问题
13