2016-04-21 78 views
1

我有一个类处理一个字符串,并对它执行许多操作。重构揭示私有方法进行单元测试

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

例子:

public String process(String stringToProcess) throws Exception { 

    processedString = process1(processedString); 
    processedString = process2(processedString); 
    processedString = process3(processedString); 
    processedString = process4(processedString); 
    ... 
    processedString = process10(processedString); 
    ... 

    return processedString; 
} 

我敢肯定有一个更好的方式来重构这个使它更清洁,但最重要的,我希望能够单元测试过程1,过程2等

请注意,process1,2等...可以是2线方法还是大方法。

我需要处理方法以某种方式公开来测试它们。有没有可以实现这一目标的设计模式?

我想过使用枚举来实现这一点,但我认为这是以某种方式使它更容易混淆。这个实现并不是最好的,但一眼就知道发生了什么。

编辑:这种方法对我来说不算太坏,但所有的处理方法都应该是私有的。我想单元测试它们。 我看到这个question,所以我可以测试他们,即使是私人的,但第一步是确保它不能做得更好。

+1

有什么问题你目前的做法? –

回答

1

你可以看看http://www.codeproject.com/Articles/455228/Design-Patterns-3-of-3-Behavioral-Design-Patterns#Chain但也许它是你的任务是一种矫枉过正。

我会做的是提取process1process2等,以单独的类。然后,您可以a)分别使用单元测试对它们进行测试b)将它们注入您的班级,并按照必要的顺序在process方法中使用它们。

看看也给这个帖子:Design Pattern for a multi-step algorithm也许你会从中得到一些想法。

0

你可以指定你的“私有”方法作为包保护。只有同一个包(但来自不同源文件夹,如来自不同项目的src/main/java和src/test/java或...)的类才能访问这些方法。

private void myPrivateMethod(){} 

会变得

/*no visibility keyword for declaring a method package protected*/ 
void myPrivateMethod(){}