refreshDisplay() getM-6ren">
gpt4 book ai didi

c++ - "#ifdef"守卫的替代品,用于抑制对特定类的调用

转载 作者:太空狗 更新时间:2023-10-29 23:16:49 24 4
gpt4 key购买 nike

我正在重构一个 GUI 和后端高度耦合的应用程序,主要是因为一个特定的类 MainGui 被到处调用以刷新屏幕或显示特定的留言如

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

正因为如此,一些模块在没有 GUI 的情况下是无法测试的。我们需要创建一个可用于测试的命令行可执行文件。

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

ps:我可以修改MainGuigetMainGui()

最佳答案

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

getMainGui()

将返回 MainGuiMock,在 getMainGui() 中您可以使用 ifdef 来决定返回哪个实现。

[编辑]

根据您的 getMainGui() 现在的样子,您可以根据外部配置文件或命令行选项等决定返回什么实现。但这需要 MainGui 和 MainGuiMock 有一些共同的基类。

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

关于c++ - "#ifdef"守卫的替代品,用于抑制对特定类的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21848679/

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