【发布时间】:2011-12-16 20:22:14
【问题描述】:
我开始用 C 语言编写一个简单的程序,并且想将配置存储在磁盘上。为了促进正确和正确的单元测试,我想做一些事情来防止被测代码实际读取和写入磁盘。
配置文件格式,为了参数是YAML。
程序的 API 可能类似于:
myapp config
会转储整个配置。 (有预先存在的配置文件/模拟)
myapp config server
将转储服务器子密钥。 (有预先存在的配置文件/模拟)
myapp config server=example.com
会用新值写入文件(无论是否有一个预先存在的文件)
在内部,配置只是一个结构,其中包含少量密钥、服务器主机、服务器端口和用于进行一些 API 调用的用户名。
我一点也不担心文件在磁盘(目录)上的位置或 getopt/CLI 解析,只是如何模拟网络和文件系统操作对我来说很重要。
问题更进一步,即询问可以使用哪些技术来存根网络。
我很可能会使用 cmockery 和 libcurl。
我的第一个想法是“也许我应该做一个像 read_configuration_file() 这样的函数,我可以在我的单元测试中模拟”,但我真的不确定这样做的优点,ruby 中的代码存根文件系统可能很简单:
File.stubs(:read).with('./configuration.yml').returns("---\nserver: example.com\n")
而且,在这种背景下,以C 的术语思考,我发现这很困难。
我观察到似乎没有多少人用 C 语言测试这些东西,或者更具体地说,如果他们这样做了 - 他们并没有写关于它的文章。
注意:这不是作业问题,只是在我写完整个东西后听起来有点像,我实际上只是在尝试学习 C,来自 Ruby背景;您可能会注意到我关于尝试做 C "right" 的其他一些问题。
【问题讨论】: