自我.assertTrue(False) 测试的是什么

2024-06-01 23:20:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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块中看不到任何类似的例子。

感谢您的帮助。


Tags: selfnonedatetimecreatenotresourceutctzinfo
3条回答

虽然不是对标题的直接回答,但这应该能回答你的实际问题。

  1. 您不应该捕捉Exception(除非您在之后重新发送)。

    except Exception, e:
    

    处理异常时,必须指定要捕获的确切错误。例如,调用create_reservation的代码可能会捕获您定义的ReservationError异常。

    如果希望此代码正常工作,则必须测试并确保create_reservation引发correct错误。所以即使在测试中,你仍然必须使用正确的错误。

  2. 如果需要测试某些代码引发异常,请使用适当的断言,即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,检查它是否引发异常,如果发生异常,则通过,如果类型正确,则通过,否则失败。

我可能不会那样设置考试。您要做的是确定您的方法的行为到底是什么,并相应地进行测试。

因此,如果您正在测试一个失败案例,例如,我们假设您的方法在失败时返回类似“reservation failed”的内容,那么您应该改为执行以下操作:

# where msg is the response of your call
self.assertEqual(msg, "reservation failed", "assertion failed")

来自python文档的函数签名

 assertTrue(expr, msg=None)

检查给定的expr是否为True。如果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"

因此,在try块中,如果没有引发任何异常,self.assertTrue(False, "Should not create reservation")将抛出一个错误,因为False不是True

如果引发异常,则代码将进入Except blockself.assertTrue(True, "Not authorized")不会引发任何错误,因为True为True。

因此,如果要引发异常,如果发生任何异常,请将self.assertTrue(False, "Should not create reservation")移动到Except块

except Exception, e:
    self.assertTrue(False, "Should not create reservation")

相关问题 更多 >