我正在重构GUI和后端高度耦合的应用程序,主要是因为在整个地方都调用了特定类MainGui来刷新屏幕或显示特定消息,例如

getMainGui()->refreshDisplay()
getMainGui()->beginUpdate()
getMainGui()->showMessage()

因此,如果没有GUI,某些模块将无法测试。我们需要创建可用于测试的命令行可执行文件。

我想在命令行上进行那些操作。最明显的方法是仅使用#ifdef保护调用,但是有数百个引用...我想使更改尽可能本地化。有什么想法吗?

ps:我可以修改MainGuigetMainGui()

最佳答案

为什么不为MainGui创建另一个实现?出于测试目的:

getMainGui()

会返回MainGuiMock,在getMainGui()中,您可以使用ifdef来确定要返回的实现。

[编辑]

根据getMainGui()现在的样子,您可以基于外部配置文件或命令行选项等决定返回哪种实现。但这对于MainGui和MainGuiMock都需要一些通用的基类。

实际上,这取决于您的要求,我的第一个建议是要求您必须拥有.exe文件(一个用于测试)以及另一个实际的GUI应用程序。按照[edit]之后的建议进行依赖注入(inject),您将拥有可以配置为在命令提示符下执行测试用例的singe exe。

10-07 18:48