存根在编程中是什么意思?


Answers:


30

存根方法是仅返回简单但有效(但不一定正确)结果的方法。

它们通常是在构建基础结构时制作的,您现在不想花时间在所需的每种方法上。相反,您可以创建存根,以便所有内容都能编译,并且IDE的自动完成功能可以知道您计划使用的方法。

使用存根的另一个地方是在测试时进行模拟,您可以通过依赖项注入提供存根方法,而不是普通的依赖项,它们会返回固定的结果,然后确保代码对其执行正确的操作。这将测试与您要测试的代码隔离开,这意味着您无需为了运行这些测试而启动数据库。


3
Nitpick:存根是在存根时使用,而不是在嘲笑时使用。嘲笑时,您使用嘲笑。martinfowler.com/articles/mocksArentStubs.html
约尔格W¯¯米塔格

上面的+1,但我想补充一点,如果您不希望使用已存根的方法,则存根抛出异常或导致错误可能会有所帮助。示例“ NotImplementedException”:msdn.microsoft.com/zh-cn/library/…commons.apache.org/proper/commons-lang/javadocs/api-release/org/…–
Dan Armstrong

6

也许最好用一个具体的例子来回答。让我们考虑创建桌面应用程序的情况。你决定有一个名为功能createMenubarcreateToolbar并且createMain让你的应用程序的构造是干净整洁。

您的主要代码如下所示(此示例在python中):

class ExampleApp():
    def __init__(self):
        self.createMenubar()
        self.createToolbar()
        self.createMain()

在一切正常运行之前,您的主要功能将失败,那么如何在开发过程中测试您的应用程序?例如,如果您开始使用createMenubar,则在创建菜单栏后初始化将失败,因为您尚未实现GUI的工具栏或主区域。

这就是存根的所在。您可以创建一个名为的函数createToolbarcreateMain该函数可以满足应用程序构造函数的要求(即,这些函数存在),而无需实际实现。这些功能是存根:

def createToolbar():
    pass

def createMain():
    pass

有了这些存根,您就可以开始实现主程序和菜单栏,而不必担心工具栏或程序主要部分的细节。最终,您将转到工具栏,然后将存根替换为实际功能。最后,您将删除的存根,createMain并提供一个实际的实现。

请注意,存根不一定无所事事。例如,这些存根可以创建一个空的容器小部件,应用程序构造函数可以对其进行布局。关键是,您创建的虚拟函数或对象的作用足以使其他代码在开发过程中运行。随着时间的流逝,您将一个一个地替换存根,直到您的应用程序完成。


2

“自顶向下”编程中使用“存根”。那就是从通用到特定构建应用程序的时候。这样,您将使用“存根”作为您没有时间构建的特定应用程序的“占位符”。他们通常将伪或随机值之类的东西返回到程序的更通用部分。没关系,存根提供了足够的值以使程序的“高级”部分工作。直到需要替换存根或使用其真实的计算或值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.