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

Java单元测试:从公共方法或包私有方法进行测试

姚洲
2023-03-14

我有一个类price,它有一个公共方法calculateBya(),它调用另一个私有方法calculateBya()

public class Price {
    public SomeObject calculate() {
        if(someCondition) {
            calculateByA()
            // ....
        } else {
            //Calculate something else
        }
    }

    private int calculateByA() {
        //calculation logic
    }
}
    通过调用公共方法 calculate()并将 SomeCondition设置为 true来进行测试。
  1. calculatebya()更改为package-private并在测试中直接调用它。

然而,我不确定哪种方法更好。

共有1个答案

柳逸春
2023-03-14

我非常不喜欢powermock等人的用法。问题不在于它们允许您绕过visibilitysystem(其他语言根本不需要使用visibilitysystem,例如,请参见python),而在于您试图测试实现细节。

为可见方法编写测试,并观察其私有方法的副作用。在你的例子中,例如在某个地方测试,你的结果与该情况下的预期相匹配。如果因为有很多私有方法而出现问题,可以考虑使用一个包并将代码拆分开来--无论如何,它可能太大了。也用迪卢克!

 类似资料:
  • 我需要一些软件测试方面的指导。 我把事情复杂化了,但我太专注了,看不到我做错了什么,也看不到其他做事方式。 我有几个公共方法使用相同的私有方法。 私有方法本身: 必须为其特定角色处理许多场景 假设私有方法需要5个测试来覆盖所有场景,并由6个公共方法使用。 问题 > 然后我是否需要至少5x6个测试? 如何对每个公共方法重复使用私有方法的测试? 有没有关于重构重复测试的示例/文章? 示例 OnStar

  • 在我们的ASP。Net核心应用程序,我们有许多API从服务类调用公共方法。 服务类正在实现一个接口。 每个服务方法(取决于复杂性和需求)可以调用任意数量的内部或私有或辅助方法。 虽然这些内部/私有/或辅助方法中的每一个都单独进行单元测试,但我们如何以这样一种方式测试公共服务方法,即我们不必重复已经在测试内部/私有/辅助方法中花费的代码/精力? e、 我们可以很容易地模拟接口方法,说接口方法需要这些

  • 我是单元测试的新手,最近尝试了JUnit测试和Mockito。 我很困惑我该如何测试公共功能。

  • 以下是设置: 我需要测试公共方法,以检查是否筛选了invalidObjects。如您所见,它将传递给私有的方法。该方法过滤掉无效的对象,并将有效的对象发送给web服务方法。该web服务方法不返回任何内容。因此,我不知道是否只有有效的对象被发送到web服务方法。你建议我怎么做才能检验这个案子?我正在使用Mockito框架来模拟对象。

  • 我正在为我的一个应用程序编写单元测试,作为一个很好的实践,我试图使我的类中的所有方法尽可能私有,所以我最终可能会使用大部分私有方法的类,很少使用公共方法,有时还会调用一些静态方法(我的其他类或一些文本,等等) 我想知道如何测试我试图只依赖Mockito和JUnit的所有类,因为Robolectric和Powermockito似乎扩展了单元测试中应该做什么的边界。我应该忽略所有私有和静态方法,以及偶

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