我正在为我们的应用程序编写一些测试,但我不确定我在这里测试正确的东西。这是我的考验。
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")
我想确定如果保留扩展名属于不同的资源,则无法创建保留扩展名,因此此行应在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)
这是:
self.assertTrue(False, "Should not create reservation")
断言保留创建导致False值?或者我是否正确理解断言匹配器。我已经尝试过浏览文档,但是我在一个对我来说很明显的try catch块中看不到类似这样的例子。
非常感谢帮助。
答案 0 :(得分:2)
python docs的函数签名
assertTrue(expr, msg=None)
检查给定expr
是否为True
。如果expr
为False
,则会使用提供的消息(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"
因此,在您的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 Exception, e:
self.assertTrue(False, "Should not create reservation")
答案 1 :(得分:1)
虽然不是标题的直接答案,但这应该可以解答您的实际问题。
你永远不应该抓住Exception
(除非你之后再重新加注)。
except Exception, e:
处理异常时,必须指定要捕获的确切错误。例如,调用create_reservation
的代码可能会捕获您定义的ReservationError
异常。
如果您希望此代码有效,则必须先测试并确保create_reservation
引发正确错误。因此,即使在测试中,您仍然必须使用正确的错误。
如果您需要测试某些代码会引发异常,请使用相应的断言assertRaises。它可以以两种方式使用。要么作为电话:
self.assertRaises(ReservationError, create_reservation, self.regularUser2, .........)
或者您可以使用with
关键字(需要python 2.7或python 3.1或更新版本)将其用作上下文管理器:
with self.assertRaises(ReservationError):
create_reservation(self.regularUser2, ...........)
两个示例都会运行create_reservation
,检查是否会引发异常,如果 ,则传递,否则会失败。
答案 2 :(得分:0)
我可能不会那样设置我的测试。您要做的是确定您的方法的确切行为并进行相应的测试。
所以,如果你正在测试一个失败案例,并且让我们说,例如,如果失败,你的方法会返回类似“预订失败”的内容,那么你应该做这样的事情:
# where msg is the response of your call
self.assertEqual(msg, "reservation failed", "assertion failed")