java - 我应该如何在 Java 中测试私有(private)方法?

标签 java unit-testing testing junit automated-tests

Possible Duplicate: What’s the best way of unit testing private methods?

我是一名初级程序员,我不知道如何编写一个结构良好的应用程序,以便进行单元测试。我想编写能够在之后添加有效单元测试的应用程序。

问题在于 private 方法 - 它们无法在其类之外进行测试。

我是否应该通过将所有 private 的方法更改为 protected 来解决这个问题,并让测试类扩展源类?还是有更好的解决方案?

我的解决方案(私有(private) splitLetters => protected splitLetters)会这样工作:

源类:

class MyClass{
  protected splitLetters(int num){
    return num+2;
  }
}

测试类:

class Test_MyClass extend MyClass{
  public splitLettersTest(){
  for(int i=0;i<100;i++){
    System.println(parent.splitLetters(i));
  }
 }
}

解决方案:

  1. 不测试私有(private)方法 - 有时私有(private)方法正在执行非常复杂的任务,应该很好地测试,我们不希望用户可以访问这些方法。很快,解决方案将私有(private)方法更改为 protected 方法。

  2. 嵌套类的测试方式 - 有问题,因为 QA 会更改源代码

  3. 反射 - 如果这样可以调用私有(private)方法,它看起来是一个很好的解决方案 http://www.artima.com/suiterunner/private3.html (我应该学习更多来理解反射。如果我们可以从另一个类调用私有(private)方法,我不明白反射如何不打破拥有公共(public)和私有(private)方法的所有想法。)

  4. 不定义私有(private)方法(正如我在我的解决方案中展示的那样) - 有问题,因为有时我们必须定义私有(private)方法。

最佳答案

您应该不需要测试私有(private)方法。

  • 私有(private)方法是具体实现的一部分。您不应该测试实现,而应该测试功能。如果您测试一个类公开的功能,您可以根据单元测试更改实现。
  • 如果您觉得需要测试私有(private)方法,这是一个很好的迹象,您应该将私有(private)方法移至另一个类并公开该方法。通过这样做,您可以获得更小的类,并且可以轻松地测试这些方法。如果您不想公开这个新类,可以将其设为包私有(private)(默认访问修饰符)。

关于java - 我应该如何在 Java 中测试私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3299405/

相关文章:

在 AngularJS 和 Testacular 中测试广播

java - 返回按钮和取消按钮的实现有什么区别?

java - 如何创建数组列表,其中一个参数将等于另一个数组的参数

java - 在j2me中读取文件内容

java - 是否有用于 Java 自定义集合实现的测试套件?

c# - 用于单元测试的最小起订量服务定位器

java - 如何使用最新的 STS 版本(3.8.4.RELEASE)正确创建在控制台中运行的简单 Spring 项目?

javascript - Angular 1.5 测试组件与 jasmine

android - 推荐的安卓应用测试方法

testing - Katalon Studio : WebUI. verifyElementText 看不到元素中的文本