我编写了一个Python模块,我正在使用doctest来测试它。我在模块中嵌入了测试,我用
调用doctestif __name__ == '__main__':
import doctest
doctest.testmod()
所有测试都完全通过(或失败)我期望它们。这种方法的唯一问题是,随着测试用例数量的增加,遵循代码变得很困难。我已经读过doctest允许你在一个单独的文件中进行测试,所以我试图这样做。我发现当我将它们放在另一个文件中时,在我的模块中运行良好的测试失败了。
这是一个示例测试文件。
>>> from modbusServer import ModbusServer
>>> s = ModbusServer('/dev/ttyUSB0')
>>> s.server # doctest: +ELLIPSIS
<modbus_tk.modbus_rtu.RtuServer instance at 0x...>
以下是我运行该测试时会发生的事情
test@testpc ~/code/newmodbus $ python -m doctest test.txt
**********************************************************************
File "test.txt", line 3, in test.txt
Failed example:
s.server # doctest: +ELLIPSIS
Expected:
<modbus_tk.modbus_rtu.RtuServer instance at 0x...>
Got:
<modbus_tk.modbus_rtu.RtuServer instance at 0xa37adec>
当我从我的模块调用doctest时,此测试工作正常,但它现在失败了。有关在我的测试文件中需要更改的内容的任何想法吗?
答案 0 :(得分:3)
这还不是答案,但在评论中看起来很难看。以下是我的工作原理,您可以在环境中查看:
(test)alko@work:~$ cd /tmp
(test)alko@work:/tmp$ cat test.txt
>>> from collections import deque
>>> deque().__init__ # doctest: +ELLIPSIS
<method-wrapper '__init__' of collections.deque object at 0x...>
(test)alko@work:/tmp$ python -m doctest test.txt
(test)alko@work:/tmp$
根据评论进行更新
由于您的代码一切正常,因此您的doctest模块和ELLIPSIS指令都可以。正如您所提到的那样,文件源自Windows,很明显,问题在于行结尾。 Doctest尝试将0xa37adec>\r\n
与表达式0x...>\n
的{{1}}消费与...
变量a37adec
部分匹配,在>
符号之前,并且在回车符上失败。
您可能希望为所有源自Windows的文件运行fromdos
实用程序。
或者您可以(我建议这样做)使用git
来管理您的开发,并且很乐意为您替换行结尾。