Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 how-tos_Python_Unit Testing_Github - Fatal编程技术网

单元测试python how-tos

单元测试python how-tos,python,unit-testing,github,Python,Unit Testing,Github,我是Github的新手。我不熟悉编写单元测试用例。我参与了一个项目,但业主要求我提供在修复之前失败的单元测试用例,并在修复之后工作。我该怎么做呢?我把它们都写在一起好吗?在同一时间,我将有一个代码副本(即有修复或无修复)。我正在使用Python并导入unittest。我很困惑。在修复之前,我得到了一个异常,因此我应该使用assertRaises()来解决这个问题。我确实读了很多,但无法开始。假设您已修复以下损坏的delta函数: 断版: def delta(a, b): return a

我是Github的新手。我不熟悉编写单元测试用例。我参与了一个项目,但业主要求我提供在修复之前失败的单元测试用例,并在修复之后工作。我该怎么做呢?我把它们都写在一起好吗?在同一时间,我将有一个代码副本(即有修复或无修复)。我正在使用Python并导入unittest。我很困惑。在修复之前,我得到了一个异常,因此我应该使用assertRaises()来解决这个问题。我确实读了很多,但无法开始。

假设您已修复以下损坏的
delta
函数:

断版:

def delta(a, b):
    return a - b
固定版本:

def delta(a, b):
    return abs(a - b)
然后,提供以下测试用例。它将在损坏的版本中失败,并在修复的版本中工作

import unittest

from module_you_fixed import delta

class TestDelta(unittest.TestCase):
    def test_delta(self):
        self.assertEqual(delta(9, 7), 2)
        self.assertEqual(delta(2, 5), 3)

if __name__ == '__main__':
    unittest.main()

我假设该项目使用标准库unittest模块。您应该使用项目使用的框架。

绝对完美的示例。三声欢呼。只有一件事:我在考虑写两个这样的文件,一个是用assertsequal()修复的,一个是用assertRaises()异常的(坏的)。但我认为在看到你的答案后,我可以继续使用一个文件,然后使用assertsEqual。现在坏掉的一个会失败,然后修复的一个会通过。这样是否可以接受,或者我是否需要编写两个文件并通过固定的测试(使用assertsEqual)和断开的测试(使用assertsEqual)?无论如何,你的答案是+1。@Dominix,只要assertEqual一个。当我使用assertEqual()并且第一次测试失败时,我的意思是说调用self.assertEqual(delta(9,7),2),它就不必执行下一行了。我如何才能让它对每个测试用例执行并打印所有测试用例的失败,而不是只打印一个测试用例的失败。您可以将test_delta()拆分为test_delta_a_gt_b()、test_delta_b_gt_a()。不需要使用
assertRaises
:旧代码的测试应该失败,因此有一个简单的
assertEqual
(或其他检查之一)是正确的方法。如果要测试函数是否具有正确的错误处理(例如,在提供无效输入时是否抛出正确的异常),只需使用
assertRaises
.总的来说,你总是坚持正确的行为。感谢Florian让我了解assertRaises()的正确用法