kg_*_*sYy 9 python unit-testing pycharm
我正在使用"unittest"框架编写一些Python单元测试,并在PyCharm中运行它们.一些测试将长生成的字符串与从文件读取的参考值进行比较.如果这个比较失败,我希望看到两个比较字符串的差异使用PyCharms差异查看器.
所以代码是这样的:
    actual = open("actual.csv").read()
    expected = pkg_resources.resource_string('my_package', 'expected.csv').decode('utf8')
    self.assertMultiLineEqual(actual, expected)
并且PyCharm很好地将测试识别为失败,并在结果窗口中提供一个链接以单击打开diff查看器.但是,由于unittest如何缩短结果,我在diff查看器中得到了这样的结果:
左边:
'时间[57个字符] ercent 0; 1; 1; 1; 1; 1; 1; 1 0; 2; 1; 3; 4; 2; 3; 1 0; 3; [110 chars] 32'
右边:
'time [57 chars] ercen 0; 1; 1; 1; 1; 1; 1; 1 0; 2; 1; 3; 4; 2; 3; 1 0; 3; 2 [109 chars] 32'
现在,我想摆脱所有[X字符]部分,只看到整个文件和PyCharm完全可视化的实际差异.
我试图查看unittest代码,但找不到配置选项来打印完整的结果.有一些变量,如maxDiff和_diffThreshold,但它们对此打印没有影响.
此外,我试图在py.test中运行它,但在PyCharm中的支持甚至更少(甚至没有链接到失败的测试).
是否有一些技巧使用difflib与unittest或者其他一些Python测试框架的其他技巧来做到这一点?
TestCase.maxDiff=None在很多地方给出的答案只能确保unittest输出中显示的差异是全长。为了在< 点击查看差异 >链接中获得完整的差异,必须设置MAX_LENGTH。
import unittest
# Show full diff in unittest
unittest.util._MAX_LENGTH=2000
资料来源:https : //stackoverflow.com/a/23617918/1878199
好吧,出于测试目的,我设法解决了这个问题。我没有使用unittest 中的assertEqual 方法,而是编写了自己的方法并在unittest 测试用例中使用它。如果失败,它会为我提供全文,并且 PyCharm 差异查看器也会正确显示完整差异。
我的断言语句位于其自己的模块中(t_assert.py),如下所示
def equal(expected, actual):
    msg = "'"+actual+"' != '"+expected+"'"
    assert expected == actual, msg
在我的测试中我这样称呼它
    def test_example(self):
        actual = open("actual.csv").read()
        expected = pkg_resources.resource_string('my_package', 'expected.csv').decode('utf8')
        t_assert.equal(expected, actual)
        #self.assertEqual(expected, actual)
到目前为止似乎有效..