self.assertTrue(False) 它到底测试什么

jam*_*es 4 python django unit-testing django-testing

我正在为我们的应用程序编写一些测试,但不确定我在这里测试的内容是否正确。这是我的测试。

def test_ReservationExtensionFalseWrongResource(self):
        'does not create a reservation that is an extension if different resource'
        try:
            reservation1 = Reservation.objects.create(user=self.regularUser1, resource=self.resource1, modality=self.modality, timeFrom=datetime(2015, 6, 11, 20, tzinfo=pytz.utc), timeTo=datetime(2015, 6, 11, 21, tzinfo=pytz.utc), count=1, notes=None, extendedReservation=None)
            reservation = create_reservation(self.regularUser2, self.regularUser2, None, self.resource2, self.modality, datetime(2015, 6, 11, 20, tzinfo=pytz.utc), datetime(2015, 6, 11, 21, tzinfo=pytz.utc), 1, reservation1.uuid)
            self.assertTrue(False, "Should not create reservation")
        except Exception, e:
            self.assertTrue(True, "Not authorized")
Run Code Online (Sandbox Code Playgroud)

我想确保如果保留扩展属于不同的资源,则无法创建保留扩展,因此该行应该在 try 块中失败:

 reservation = create_reservation(self.regularUser2, self.regularUser2, None, self.resource2, self.modality, datetime(2015, 6, 11, 20, tzinfo=pytz.utc), datetime(2015, 6, 11, 21, tzinfo=pytz.utc), 1, reservation1.uuid)
Run Code Online (Sandbox Code Playgroud)

做这个:

self.assertTrue(False, "Should not create reservation")
Run Code Online (Sandbox Code Playgroud)

断言预留创建导致了 False 值?或者我对断言匹配器的理解不正确。我尝试过查看文档,但在对我来说显而易见的 try catch 块中看不到任何类似的示例。

感谢帮助。

lev*_*evi 6

来自 python 文档的函数签名

 assertTrue(expr, msg=None)
Run Code Online (Sandbox Code Playgroud)

检查给定的是否exprTrue. 如果是这样exprFalse它将使用提供的消息引发错误 ( msg)

self.assertTrue(True, "Not authorized") # Is always True 

self.assertTrue(False, "Should not create reservation")  # Is always False and it will throw an error saying "Should not create reservation"
Run Code Online (Sandbox Code Playgroud)

因此,在您的 try 块中,如果未引发任何异常,self.assertTrue(False, "Should not create reservation")则会抛出错误,因为False不是True

如果引发异常,那么您的代码将进入Except block并且 self.assertTrue(True, "Not authorized")不会引发任何错误,因为 True 就是 True。

因此,如果你想抛出异常,如果发生任何异常,请移至self.assertTrue(False, "Should not create reservation")except 块

except Exception, e:
    self.assertTrue(False, "Should not create reservation")
Run Code Online (Sandbox Code Playgroud)