java - 重构以公开用于单元测试的私有(private)方法

标签 java design-patterns refactoring

我有一个类,它处理一个字符串并依次对其执行许多操作。

这些操作需要按特定顺序完成。

示例:

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 行方法,也可以是大方法。

我需要以某种方式公开流程方法来测试它们。有没有一种设计模式可以实现这一点?

我考虑过使用枚举来实现这一点,但我认为这在某种程度上让它变得更加困惑。这个实现肯定不是最好的,但一看就知道发生了什么。

编辑:这种方法对我来说还不错,但是所有的过程方法都应该是私有(private)的。我想对它们进行单元测试。 我看到了这个question ,所以即使是私有(private)的我也可以测试它们,但第一步是确保它不能做得更好。

最佳答案

您可以看看http://www.codeproject.com/Articles/455228/Design-Patterns-3-of-3-Behavioral-Design-Patterns#Chain但也许这对你的任务来说有点矫枉过正。

我要做的是将process1process2等提取到单独的类中。然后,您可以 a) 单独使用单元测试来测试它们 b) 将它们注入(inject)到您的类中,并按必要的顺序在 process 方法中使用它们。

另请参阅这篇文章:Design Pattern for a multi-step algorithm也许您会从中得到一些想法。

关于java - 重构以公开用于单元测试的私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36782320/

相关文章:

refactoring - TDD 如何使重构更容易?

python - __init__ 可以用作正常的初始化方法,而不是构造函数吗?

java - 使用 Apache Camel 处理不同优先级的 JMS 消息

c# - 如何重构这些泛型方法?

c# - 在大型 C# 应用程序上执行批量命名空间重命名的最佳方法是什么?

c# - 没有产品类基类/接口(interface)的构建器设计模式

java - Java中如何将常量转换为小数

java - 在特定时间之间重定向到 HTML 页面的脚本

java - 让 Jsoup 支持 JavaScript 动态生成的 html

java - Spring @Profile 和 Autowiring 匹配