Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在使用unix passwd和组数据库的模块上运行单元测试?_Python_Unit Testing_Python 2.7 - Fatal编程技术网

Python 如何在使用unix passwd和组数据库的模块上运行单元测试?

Python 如何在使用unix passwd和组数据库的模块上运行单元测试?,python,unit-testing,python-2.7,Python,Unit Testing,Python 2.7,我正在用Python编写一个项目,该项目需要大量使用文件系统操作,包括更改文件的所有权。这意味着我需要查询passwd和group数据库,以便在用户/组的字符串表示形式和数字uid/gid之间进行转换 我想编写单元测试来涵盖处理文件系统操作的模块。但是,我看不到任何方法可以保证用户名/组名/uid/gid在测试时会出现在passwd和组数据库中 我想通过在单元测试中模拟和模块来解决这个问题,但是,这意味着我的单元测试将与模块的实现紧密耦合。我根本不想关心我的模块是否使用pwd和grp模块 我如何

我正在用Python编写一个项目,该项目需要大量使用文件系统操作,包括更改文件的所有权。这意味着我需要查询passwd和group数据库,以便在用户/组的字符串表示形式和数字uid/gid之间进行转换

我想编写单元测试来涵盖处理文件系统操作的模块。但是,我看不到任何方法可以保证用户名/组名/uid/gid在测试时会出现在passwd和组数据库中

我想通过在单元测试中模拟和模块来解决这个问题,但是,这意味着我的单元测试将与模块的实现紧密耦合。我根本不想关心我的模块是否使用pwd和grp模块

我如何编写单元测试,使模块认为它可以运行chown操作,这需要将用户映射到uid,将组映射到gid,而不管passwd和group数据库的实际内容如何


关于文件系统操作的单元测试,这里有一个单独但类似的问题,但我相信在这个主题上已经有了一个大致相同的问题,所以我在这里不再问了-不幸的是,给出的大多数答案都依赖于模拟操作系统模块,因此,将测试和实现耦合起来。

您是否考虑过构建一个监狱来运行测试?显然,这需要的不仅仅是chroot,但几乎任何构建在它之上的东西——FreeBSD监狱、Solaris容器、Docker容器、Linux3用户名称空间等等——都应该足够了。我看不出有什么办法可以避免这种情况。最后,当您在操作系统上调用某些函数(当然包括错误处理)时,您必须信任操作系统的性能。如果您不想通过mock来进行测试,从而出于良好的理由将自己与环境隔离,正如您所说的,那么您只能咬紧牙关,提供这样一个受控的环境。这将使这个集成更加复杂。所以我个人会选择模拟并解决问题的方法。是的,但这需要根权限,我不想强迫人们提升他们的权限,只是为了在潜在的安装站点上测试我的包。@deets,你说得对,这似乎是问题最少的方法,但我真的希望有一种方法可以避免这种情况——也许是一种Unix工具,它以某种方式模拟系统调用?似乎单元测试和系统级操作会如此频繁地混合在一起,因此应该有更好的解决方案。