如何测试私有方法

问题描述 投票:0回答:2

我有一堂课 - 这是一个简单的示例,仅供演示。

class Foo
{
  public int foo (int x)
  {
    if (bar (x)) 
    { 
      return 0; 
    }
    return 1;
  }

  private boolan bar (int x)
  { 
    // whatever
  }
}

我想要进行 JUnit 测试。我要测试的是

bar
,而不是
foo

class MyTest
{
  @Test
  void test ()
  {
    assertTrue (bar (0));
    assertTrue (bar (1)); 
    ....

但是

bar
对于外部课程来说是私有的
MyTest
。看不见。

现在该怎么办?公开

bar
或尝试对包含
foo
bar
进行测试?

java junit
2个回答
0
投票

通常,我们编写的单元测试应该只检查我们的公共方法契约。私有方法是公共方法的调用者不知道的实现细节。此外,改变我们的实现细节不应该导致我们改变我们的测试。

一般来说,敦促测试私有方法会凸显以下问题之一:

我们的私有方法中有死代码。 我们的私有方法太复杂,应该属于另一个类。 我们的方法一开始就不应该是私有的。 因此,当我们觉得需要测试私有方法时,我们真正应该做的是修复底层设计问题。

(来自这里


-1
投票

首先想一下你是否真的想这样做。如果您必须测试私有方法,通常意味着您的代码架构不好,可能您应该将此方法提取到另一个类并注入对象,而不是强制测试它。

但是回答一个问题:我认为你可以使用java反射来改变方法的可见性并调用它。

© www.soinside.com 2019 - 2024. All rights reserved.