Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改单元测试的私有方法标志与公共方法标志_Java_Unit Testing_Testing_Junit - Fatal编程技术网

Java 更改单元测试的私有方法标志与公共方法标志

Java 更改单元测试的私有方法标志与公共方法标志,java,unit-testing,testing,junit,Java,Unit Testing,Testing,Junit,我知道用public更改私有方法的符号忽略了封装原则。另外,私有方法是一个实现细节。但我想知道,如果该方法不影响或破坏系统的其他部分,我可以公开该方法的签名吗 比如, 我有一个包含开关盒块的方法 private Object foo(Object object, MyTypeEnum type) { .... switch(type) { case type.x: return "a"; case type.y:

我知道用public更改私有方法的符号忽略了封装原则。另外,私有方法是一个实现细节。但我想知道,如果该方法不影响或破坏系统的其他部分,我可以公开该方法的签名吗

比如,

我有一个包含开关盒块的方法

private Object foo(Object object, MyTypeEnum type) {
    ....
    switch(type) {
      case type.x:
         return "a";
     case type.y:
         return "b";
     case type.z:
         return "c";
     .
     .
     .
  }
  ..
 }
此外,

  • 在utils类中移动该方法以使其符号公开是一种不好的做法,因为该方法不是泛型的和可重用的
  • 测试调用私有方法(foo)的公共方法是解决方案之一。然而,我的代码库有很多遗留的和未经测试的代码,所以我必须更改其他类和方法。此外,我没有足够的时间重构代码库的其他部分

对于这种情况,您有什么建议?

您已经知道这不是一种好的形式,但由于这些确切的原因,尝试测试工作但未经测试的遗留代码通常不是一种很好的时间投资。你不想花很长时间重新构建旧东西,只是为了添加测试;它实际上增加了生产中发生意外事件的风险。看


在这种情况下,我总是尝试在更高的级别上进行测试,而不是在单个类中测试单个方法。

您已经知道这不是一种好的形式,但是尝试测试工作但未经测试的遗留代码通常不是一种很好的时间投资,因为这些确切的原因。你不想花很长时间重新构建旧东西,只是为了添加测试;它实际上增加了生产中发生意外事件的风险。看


在这种情况下,我总是尝试在更高的级别上测试,而不是在单个类中测试单个方法。

当然可以,但要注意的是,一旦它是公共的,它就是公共的。它已经是可疑的方法,因为它返回
对象
。问题是1)您是否应该,2)是否有其他测试(单元或集成)已经测试了此行为,以及3)测试此行为的ROI是否值得。这些问题没有通用的答案;这在很大程度上取决于上下文。(不相关,但是
返回后的
中断
是多余的,没有意义的。)当然可以,但要注意的是,一旦它是公共的,它就是公共的。它已经是可疑的方法,因为它返回
对象
。问题是1)您是否应该,2)是否有其他测试(单元或集成)已经测试了此行为,以及3)测试此行为的ROI是否值得。这些问题没有通用的答案;这在很大程度上取决于上下文。(不相关,但
返回后的
中断
是多余和无意义的。)完全同意。这是亚马逊的货币化链接吗?原来是!只是不是你的钱。我现在已经删除了这个链接。这是我要传达的信息:当您需要使用遗留代码时,请确保您随时可以使用“使用遗留代码”的副本。这是亚马逊的货币化链接吗?原来是!只是不是你的钱。我现在已经删除了这个链接。这是我要传达的信息:当您需要使用遗留代码时,请确保您随时可以获得“使用遗留代码”的副本