gpt4 book ai didi

java - Java 中良好的面向对象设计示例

转载 作者:行者123 更新时间:2023-12-01 08:59:00 24 4
gpt4 key购买 nike

我有一个名为 TestExecutor 的 Java 类,它负责启动测试。开始测试涉及多个阶段:

- Update test repository
- Locate the test script
- Create result empty directory
- Execute command
- Parse output
- Update database

对于每个阶段,我都在 TestExecutor 类中创建了私有(private)方法,这些方法执行上述每个操作,所有操作都包含在 try-catch block 中。我知道这不是一个好的设计,因为我的类做了太多的事情,而且由于大量功能隐藏在私有(private)方法中,因此单元测试也很痛苦。

我想听听您对重构此类的建议,因为我不确定如何摆脱与上述结构类似的东西。代码示例如下:

public void start() throws TestExecuteException {
try {
updateRepository();
locateScript();
createResultDirectory();
executeCommand();
parseOutput();
updateDatabase();
catch(a,b,c) {
}
}

private updateRepository() {
// Code here
}
// And repeat for other functions

最佳答案

我会这样做。首先,执行每个测试步骤应具有的契约。

interface TestCommand{
void run();
}

现在将您的测试命令作为单独的类。尝试使这些命令类通用,以便您可以重用类似类型的命令。现在,在您想要运行测试的类中,配置测试步骤如下。

//in your test class do this.
List<TestStep> testCommands = new ArrayList<>();
testCommands.add(new UpdateRepoCommand());
testCommands.add(new LocateScriptCommand());
// and so on....

现在,按时间顺序执行所有步骤。

public void start(testSteps) throws TestExecuteException {
try {
for(TestCommand command : testCommands){
command.run()
}
catch(Exception e) {
//deal with e
}
}

此外,正如上述 CKing 所描述的,在这些测试步骤中遵循 SOLID 原则。注入(inject)依赖项并分别为它们编写单元测试。

关于java - Java 中良好的面向对象设计示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41833147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com