在C中模拟文件系统

时间:2011-12-16 20:22:15

标签: c mocking cmake

我开始在C中编写一个简单的程序,并希望将配置存储在磁盘上。为了促进正确和正确的单元测试,我想做一些事情来防止被测代码实际读取并写入磁盘。

配置文件格式,为了参数,是YAML。

该程序的API可能类似于:

myapp config

会转储整个配置。 (其中有一个预先存在的配置文件/ mock)

myapp config server

将转储服务器子密钥。 (其中有一个预先存在的配置文件/ mock)

myapp config server=example.com

会使用新值写入文件(无论是否还有预先存在的文件)

在内部,配置只是一个包含少量密钥,服务器主机,服务器端口和用户名的结构,可以从中进行一些API调用。

我并不担心文件在磁盘(目录)或getopt / CLI解析中的位置,简单地说,如何模拟网络和文件系统操作对我来说对于这个学习练习非常重要。

这个问题更进了一步,那就是问一下可以用什么技术来存储网络

我很可能会使用cmockery和libcurl。

我的第一个想法是“也许我应该创建一个像read_configuration_file()这样的函数,我可以在单元测试中模拟”,但我真的不确定这个的优点,红宝石中的代码存根文件系统可能很简单:

File.stubs(:read).with('./configuration.yml').returns("---\nserver: example.com\n")

而且,从这个背景来看,用C术语思考,我发现相当困难。

我观察到没有多少人似乎在C中测试这些东西,或者更具体地说,如果他们这样做 - 他们没有写下它。

注意:这不是一个家庭作业的问题,它只是在我写完整件事后听起来有点像,我实际上只是想学习C,来自Ruby背景;您可能会注意到关于尝试C“正确”的主题的其他一些问题。

2 个答案:

答案 0 :(得分:0)

我认为你的前提

  

“为了促进正确和正确的单元测试,我想做   防止被测代码实际读取的东西,和   写入磁盘。“

错了。您始终可以安排从新创建的空目录或您可能想要的任何预先安排的状态运行测试。这怎么会影响测试的正确性?

答案 1 :(得分:0)

您可能想看看CUNIT的开发人员做了什么,看看是否可以避免重新发明轮子的一部分

http://sourceforge.net/projects/cunit/