【发布时间】:2016-10-06 05:15:54
【问题描述】:
我有一个程序可以与 linux 上的块设备(/dev/sda 等)进行交互和更改。我正在使用各种外部命令(主要是来自 fdisk 和 GNU fdisk 软件包的命令)来控制设备。我已经创建了一个类,作为块设备的大多数基本操作的接口(例如:它的大小是多少?它安装在哪里?等等)
这是一种查询分区大小的方法:
def get_drive_size(device):
"""Returns the maximum size of the drive, in sectors.
:device the device identifier (/dev/sda and such)"""
query_proc = subprocess.Popen(["blockdev", "--getsz", device], stdout=subprocess.PIPE)
#blockdev returns the number of 512B blocks in a drive
output, error = query_proc.communicate()
exit_code = query_proc.returncode
if exit_code != 0:
raise Exception("Non-zero exit code", str(error, "utf-8")) #I have custom exceptions, this is slight pseudo-code
return int(output) #should always be valid
所以这个方法接受一个块设备路径,并返回一个整数。测试将以 root 身份运行,因为整个程序最终都必须以 root 身份运行。
我应该尝试测试这些方法之类的代码吗?如果是这样,怎么做?我可以尝试为每个测试创建和挂载图像文件,但这似乎有很多开销,并且本身可能容易出错。它需要块设备,所以我不能直接对文件系统中的图像文件进行操作。
我可以尝试嘲笑,正如一些答案所暗示的那样,但这感觉不够。似乎我开始测试方法的实现,如果我模拟 Popen 对象,而不是输出。在这种情况下,这是对正确单元测试方法的正确评估吗?
我在这个项目中使用 python3,我还没有选择单元测试框架。如果没有其他原因,我可能会直接使用 Python 自带的默认 unittest 框架。
【问题讨论】:
标签: python unit-testing