代码:
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/