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