我正在重构GUI和后端高度耦合的应用程序,主要是因为在整个地方都调用了特定类MainGui
来刷新屏幕或显示特定消息,例如
getMainGui()->refreshDisplay()
getMainGui()->beginUpdate()
getMainGui()->showMessage()
因此,如果没有GUI,某些模块将无法测试。我们需要创建可用于测试的命令行可执行文件。
我想在命令行上进行那些操作。最明显的方法是仅使用
#ifdef
保护调用,但是有数百个引用...我想使更改尽可能本地化。有什么想法吗?ps:我可以修改
MainGui
和getMainGui()
最佳答案
为什么不为MainGui创建另一个实现?出于测试目的:
getMainGui()
会返回MainGuiMock,在getMainGui()中,您可以使用ifdef来确定要返回的实现。
[编辑]
根据getMainGui()现在的样子,您可以基于外部配置文件或命令行选项等决定返回哪种实现。但这对于MainGui和MainGuiMock都需要一些通用的基类。
实际上,这取决于您的要求,我的第一个建议是要求您必须拥有.exe文件(一个用于测试)以及另一个实际的GUI应用程序。按照[edit]之后的建议进行依赖注入(inject),您将拥有可以配置为在命令提示符下执行测试用例的singe exe。