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

时间:2017-09-29 10:18:28

标签: python unit-testing python-unittest testcase

在以下代码中,

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

2.也没关系,我们可以在一个单一的测试函数中得到正面,负面和更多断言的陈述。如果不是,请举例说明

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 个答案:

答案 0 :(得分:2)

  1. 不,只是因为您断言语句的最终结果并不意味着您的代码的所有路径都已经过评估。你不需要写'&34;测试每一行"从某种意义上说,您只需要遍历所有可能的代码路径。

  2. 作为一般准则,尽量保持测试中断言语句的数量尽可能少。当一个断言语句失败时,不执行其他语句,并且不会将其视为通常不需要的失败。

  3. 除了尝试尽可能优雅地编写测试之外,甚至比他们测试的代码还要多。我们现在不想编写测试来测试我们的测试吗?

      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。