当前位置: 首页 > 知识库问答 >
问题:

测试mocked私有方法

江渊
2023-03-14

公共方法getA()的测试按预期工作,但私有方法getB()的测试不返回模拟值“b”,而是返回与方法getB()的实际返回值相对应的“b”。必须如何调整对getB()的测试,以便返回模拟值“b”?

public class Letters {
    public String getA() {
        return "A";
    }

    private String getB() {
        return "B";
    }
}
class LettersTest {
    Letters mockedLetters = mock(Letters.class);

    @Test
    void getA() {
        when(mockedLetters.getA()).thenReturn("a");
        assertThat(mockedLetters.getA()).isEqualTo("a"); // True.

        // To check if ReflectionTestUtils actually sets the value in mockedLetters.
        when(ReflectionTestUtils.invokeMethod(mockedLetters, "getA")).thenReturn("aa");
        assertThat(mockedLetters.getA()).isEqualTo("aa"); // True.
    }

    @Test
    void getB() {
        when(ReflectionTestUtils.invokeMethod(mockedLetters, "getB")).thenReturn("b");
        assertThat((String)ReflectionTestUtils.invokeMethod(mockedLetters, "getB")).isEqualTo("b"); // False; expected: "b", but was: "B".
    }
}

共有1个答案

司寇望
2023-03-14

你可以做:

  1. 使用PowerMockito

但是等待不要做以上任何事情。因为:

  1. 你需要把代码设计成可测试的

我可以为您提供一些参考:

  • https://anthonysciamanna.com/2016/02/14/should-private-methods-be-tested.html#:~: text=简短的答案是,依赖于对象

您不应该直接测试私有方法,而应该只测试它们对调用它们的公共方法的影响

  • 从之前的文章中学习
 类似资料:
  • 有没有任何变通办法来直接测试那些方法而不公开它们?

  • 问题内容: 我有一堂课,负责将合同从CSV导入数据库。 该类本身只有一个开始导入的公共方法,而其他方法都是私有的(因为只有该类本身将使用,并且它们保留逻辑)。 我开始使用Spock对该类进行测试,并且有许多私有方法,该如何测试? 我应该将它们公开进行测试吗?测试仅主要方法,公开一种? 什么是最好的? 问题答案: 从理论上讲,您的私有方法最终会被一种公共方法所使用,否则根本就不会使用它们。因此,通常

  • 我有一个Angular 11项目,我不知道如何测试私有方法。 下面是一个代码示例: 有什么想法吗?

  • 我有一个类,它有一个公共方法,它调用另一个私有方法。 通过调用公共方法 并将 设置为 来进行测试。 将更改为package-private并在测试中直接调用它。 然而,我不确定哪种方法更好。

  • 我使用的是JMockit1.1,我所要做的就是调用一个私有方法并测试返回值。然而,我很难从JMockit去封装示例中准确理解如何做到这一点。

  • 本文向大家介绍PHPUnit测试私有属性和方法功能示例,包括了PHPUnit测试私有属性和方法功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHPUnit测试私有属性和方法功能。分享给大家供大家参考,具体如下: 一、测试类中的私有方法: 上面只是简单的写了一个类包含,一个私有变量和一个私有方法。对于protected和private方法,由于无法像是用public方法一样直接调用