Java:如果只有一个类将使用新类,重构/解耦是否有用?

标签 java unit-testing refactoring decoupling

代码:

public class Name {

private String[] name;
private String first;
private String middle;
private String last;
private String suffix;


public Name (String fullName) {
    //Name is parsed in constructor 
    parse1();
    parse2();
    parse3();
    //invoking more parse methods...
}

private void parse1() {}
private void parse2() {}
private void parse3() {}
//more parse methods...

构造函数下面的那些方法有助于解析fullName。我想将这些 parse#() 方法移动到另一个类,比如 NameHelper.class 并使所有内容都在那里 public static 但我内心的东西说像这样重构是没有用的,因为不是其他类而是 Name 会使用它。

我确实想重构,因为稍后,这将很难进行单元测试。但我不想牺牲轻松测试而不是糟糕的代码重构,因为我总是可以使用 PowerMockito 来测试私有(private)代码。

最佳答案

总是有帮助的一件事是调查责任。名字首先是……名字。

在我看来,解析字符串以创建名称似乎是一种责任,不一定属于该名称。它实际上更像是一个关联的“助手”或“服务”功能。

从这个意义上讲,只需创建该包 protected 附加类并将解析代码移入其中。

但郑重声明:我不会将事情设为私有(private),然后求助于 Powermock 锤子以对其进行测试。尤其是真正基于输入/输出的代码;为什么首先需要模拟?

我的意思是:这听起来像是您正在输入 strings,因此,您会收到一些 Name 对象。因此:您的单元测试有一些测试输入数据,实例化 NameParserService;然后检查输出是否正确。不需要任何类型的模拟/ stub !

关于Java:如果只有一个类将使用新类,重构/解耦是否有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41191658/

相关文章:

java - Python集合类在Java中的同义词

java - 有没有办法测试何时从弱集中删除元素?

java - 有没有办法处理并行 Selenium 测试执行的应用程序 session 超时?

android - Schedulers.immediate() 不适用于命令行 gradle 测试

unit-testing - Clojure "is"断言未按预期工作

java - 为什么在 Assert.assertNotNull 中调用 void 函数是有效的?

java - 将 Hibernate 实体重构为子类

java - 方法可以可读并且更短吗?

c# - 如何从遗留代码中删除共享变量

java - JFileChooser 有时会挂起