python 在一个测试函数中测试代码覆盖率和多个断言

python testing code coverage and multiple asserts in one test function

在下面的代码中,

1.If 我们断言了一个函数的最终结果,那么说我们在测试时已经覆盖了所有代码行是否正确,或者我们必须显式测试代码的每一行,如果是这样的话如何?

2.Also我们可以在一个测试中有肯定的、否定的和更多的断言语句吗function.If不请举例

def get_wcp(book_id):
    update_tracking_details(book_id)
    c_id = get_new_supreme(book_id)
    if book_id == c_id:
       return True
    return False

class BookingentitntyTest(TestCase):
    def setUp(self):
       self.booking_id = 123456789# 9 digit number poistive test case

    def test_get_wcp(self):
       retVal = get_wcp(self.book_id)
       self.assertTrue( retVal )
       self.booking_id = 1# 1 digit number Negative test case
       retVal = get_wcp(self.book_id)
       self.assertFalse( retVal )
  1. 不,仅仅因为您断言语句的最终结果并不意味着您的代码的所有路径都已被评估。在您只需要遍历所有可能的代码路径的意义上,您不需要编写 "test each line"。

  2. 作为一般准则,尽量将测试中的断言语句数量保持在最低限度。当一个 assert 语句失败时,不会执行其他语句,并且不计为通常不需要的失败。

此外,尝试尽可能优雅地编写测试,甚至比他们正在测试的代码更优雅。我们不想编写测试来测试我们的测试,现在我们会吗?

  def test_get_wcp_returns_true_when_valid_booking_id(self):
      self.assertTrue(get_wcp(self.book_id))

  def test_get_wcp_returns_false_if_invalid_booking_id(self):
      self.assertFalse(get_wcp(1))

完整无错误的代码是不可能的。

"测试表明存在错误,而不是不存在错误" - Edsger Dijkstra。