在python中的静态方法中使用AssertEquals

时间:2014-12-16 21:50:41

标签: python django unit-testing assert

我正在学习用Python编写代码,并且已经打了一针墙。我正在尝试创建一个静态方法,以便在一系列测试中重用,我似乎无法在该方法中使用单元测试。在转向静态方法之前,测试的功能如下:

self.assertEqual(api_object.status_code, 200, "\nNot getting a 200\n")

在静态方法中我尝试了几种可能的解决方案,但收效甚微。我已经确认传入的值是一个明确的匹配。变化和故障(以及我的调试过程)的快速摘要。抱歉,我无法提供更多代码,工作敏感的东西:

assertEqual(api_object.status_code, 200, "\nNot getting a 200\n")

错误:全局名称assertEqual未定义。为了纠正我试过:

TestCase.assertEqual(api_object.status_code, 200, "Not getting a 200 back")

TypeError:必须使用TestCase实例作为第一个参数调用unbound方法assertEqual()(改为使用int实例)。所以我试过了:

TestCase.assertEqual(TestCase, api_object.status_code, 200, "Not getting a 200 back")

TypeError:必须使用TestCase实例作为第一个参数调用unbound方法assertEqual()(改为获取类型实例)。

此时我有点难过。我正在使用Django框架。在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

这里最大的问题是为什么你首先使用静态方法

请勿尝试使用TestCase中的方法。你可以在这里使用assert

assert api_object.status_code == 200, "Not getting a 200 back"

在任何情况下,您都无法在没有实际TestCase.assertEqual()实例的情况下调用TestCase,因为该方法希望能够调用self上的其他方法。

答案 1 :(得分:0)

Martijn是对的:来自TestCase的{​​{1}}的实例方法需要从assertEqual()的实例调用,因此您无法将它们移动到静态方法中期待他们的工作。请注意您的原始方法

TestCase

其中self.assertEqual(api_object.status_code, 200, "\nNot getting a 200\n") 可能是指self个实例。这意味着在TestCase的实施中某处有一个像这样的方法定义:

TestCase

请注意,在Python类方法中,始终包含对调用实例的引用作为第一个参数(def assertEqual(self, testValue, expectedValue, errorMsg): )。这就是为什么当你尝试在没有self实例的情况下调用方法时,你得到了错误" TypeError:unbound方法assertEqual()必须使用TestCase实例作为第一个参数调用(改为使用int实例)。 #34;

但是,我注意到你说你想要在一系列测试中重复使用静态方法,"这些测试大概是TestCase个实例,就像你原来的非静态方法一样。如果是这种情况,您可以编写静态方法,如下所示:

TestCase

然后在非静态def runCommonTests(testInstance, other_args): api_object = get_api_object_somehow() ... testInstance.assertEqual(api_object.status_code, 200, "Not getting a 200 back") 方法中,您将调用静态方法并将当前TestCase实例传递给它。那么你最初有TestCase行的地方,你会写

self.assertEqual()

答案 2 :(得分:0)

熟悉类方法和静态方法之间的区别也很有用。

基本上,类方法对第一个参数采用实例,但静态方法不采用。