重构以公开用于单元测试的私有方法
Refactoring to expose private methods for unit testing
我有一个 class 可以处理字符串并依次对其执行许多操作。
需要按特定顺序执行这些操作。
示例:
public String process(String stringToProcess) throws Exception {
processedString = process1(processedString);
processedString = process2(processedString);
processedString = process3(processedString);
processedString = process4(processedString);
...
processedString = process10(processedString);
...
return processedString;
}
我确信有更好的方法来重构它以使其更清晰,但最重要的是,我希望能够对 process1、process2 等进行单元测试
注意 process1、2 等...可以是 2 行方法或大方法。
我需要处理方法以某种方式 public 来测试它们。是否有可以实现此目的的设计模式?
我考虑过使用枚举来实现这一点,但我认为这不知何故让它变得更加混乱。这个实现肯定不是最好的,但是一看就知道发生了什么。
编辑:这种方法对我来说还不错,但是所有的过程方法都应该是私有的。我想对它们进行单元测试。
我看到了这个question,所以即使是私有的我也可以测试它们,但第一步是确保它不能做得更好。
您可以看一下 http://www.codeproject.com/Articles/455228/Design-Patterns-3-of-3-Behavioral-Design-Patterns#Chain 但也许这对您的任务有点矫枉过正。
我要做的是提取 process1
、process2
等以分离 classes。然后你可以 a) 分别用单元测试测试它们 b) 将它们注入你的 class 并按必要的顺序在 process
方法中使用它们。
也看看这个post:Design Pattern for a multi-step algorithm也许你会从那里得到一些想法。
您可以将 "private" 方法指定为包保护。只有同一包上的 类(但来自不同的源文件夹,如 src/main/java 和 src/test/java 或...来自不同的项目)可以访问这些方法。
private void myPrivateMethod(){}
会变成
/*no visibility keyword for declaring a method package protected*/
void myPrivateMethod(){}
我有一个 class 可以处理字符串并依次对其执行许多操作。
需要按特定顺序执行这些操作。
示例:
public String process(String stringToProcess) throws Exception {
processedString = process1(processedString);
processedString = process2(processedString);
processedString = process3(processedString);
processedString = process4(processedString);
...
processedString = process10(processedString);
...
return processedString;
}
我确信有更好的方法来重构它以使其更清晰,但最重要的是,我希望能够对 process1、process2 等进行单元测试
注意 process1、2 等...可以是 2 行方法或大方法。
我需要处理方法以某种方式 public 来测试它们。是否有可以实现此目的的设计模式?
我考虑过使用枚举来实现这一点,但我认为这不知何故让它变得更加混乱。这个实现肯定不是最好的,但是一看就知道发生了什么。
编辑:这种方法对我来说还不错,但是所有的过程方法都应该是私有的。我想对它们进行单元测试。 我看到了这个question,所以即使是私有的我也可以测试它们,但第一步是确保它不能做得更好。
您可以看一下 http://www.codeproject.com/Articles/455228/Design-Patterns-3-of-3-Behavioral-Design-Patterns#Chain 但也许这对您的任务有点矫枉过正。
我要做的是提取 process1
、process2
等以分离 classes。然后你可以 a) 分别用单元测试测试它们 b) 将它们注入你的 class 并按必要的顺序在 process
方法中使用它们。
也看看这个post:Design Pattern for a multi-step algorithm也许你会从那里得到一些想法。
您可以将 "private" 方法指定为包保护。只有同一包上的 类(但来自不同的源文件夹,如 src/main/java 和 src/test/java 或...来自不同的项目)可以访问这些方法。
private void myPrivateMethod(){}
会变成
/*no visibility keyword for declaring a method package protected*/
void myPrivateMethod(){}