我正在为我们的应用程序编写一些测试,但不确定我是否在测试正确的东西。这是我的测试。
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")
断言保留创建导致了错误值?或者我对断言匹配器的理解不正确。我试过查看文档,但在try-catch块中看不到任何类似的例子。
感谢您的帮助。
虽然不是对标题的直接回答,但这应该能回答你的实际问题。
您不应该捕捉
Exception
(除非您在之后重新发送)。处理异常时,必须指定要捕获的确切错误。例如,调用
create_reservation
的代码可能会捕获您定义的ReservationError
异常。如果希望此代码正常工作,则必须测试并确保
create_reservation
引发correct错误。所以即使在测试中,你仍然必须使用正确的错误。如果需要测试某些代码引发异常,请使用适当的断言,即assertRaises。它有两种用途。作为呼叫:
或者可以将其用作上下文管理器,使用
with
关键字(需要python 2.7或python 3.1或更新版本):这两个示例都将运行
create_reservation
,检查它是否引发异常,如果发生异常,则通过,如果类型正确,则通过,否则失败。我可能不会那样设置考试。您要做的是确定您的方法的行为到底是什么,并相应地进行测试。
因此,如果您正在测试一个失败案例,例如,我们假设您的方法在失败时返回类似“reservation failed”的内容,那么您应该改为执行以下操作:
来自python文档的函数签名
检查给定的
expr
是否为True
。如果expr
是False
,则使用提供的消息(msg
)将引发错误因此,在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块相关问题 更多 >
编程相关推荐