我有一些特殊情况需要在django测试。我试图通过编写自己的测试用例来扩展现有的django测试。以下是我目前的做法。在
from django.tests import TestCase
# define my own method as a function
def assertOptionsEqual(self, first, second):
# logic here
pass
# Attach the method to the TestCase class. This feels inelegant!
TestCase.assertOptionsEqual = assertOptionsEqual
# tests go here
class KnownGoodInputs(TestCase):
def test_good_options(self):
self.assertOptionsEqual(...)
虽然这样做是可行的,但是将一个方法定义为一个以self
作为第一个参数的函数,然后将其附加到TestCase
上,感觉不太好。有没有更好的方法用我自己的方法扩充TestCase
类?我能做到。。。在
并使用MyTestCase
进行所有测试,但不知道是否有更好的替代方法。谢谢!在
我想你已经涵盖了这两种选择。您可以使用子类或monkeypatch。通常情况下,monkeypatching,实际上在运行时更改第三方类是不受欢迎的,但这可能是解决错误或确保每次使用该类时都有新方法的唯一方法。在
由于使用您的方法的唯一测试将是您的测试monkeypatching是不必要的,因此将
TestCase
子类化是非常合理的。通常,当您需要扩充现有类的方法时,您会使用monkeypatching。例如,如果您希望在现有测试用例中对TestCase.assertEqual
的调用增加逻辑以与Option
对象进行比较,您可以通过执行以下操作来monkeypatchTestCase.assertEqual
来包括自定义逻辑和其正常逻辑:然而,至少在这个例子中,子类和monkeypatches似乎都是不必要的。在
假设问题是调用
self.assertEqual(firstOptions, secondOptions)
失败,即使Option
实例相等,您不需要编写新的assertOptionsEqual
方法。您可能只需要您的Option
对象来正确定义__eq__
。在所以假设你有:
^{pr2}$上面的
first
和second
的类是什么?在对于所有Python内置类型,
assertEqual
应该可以工作。对于自定义的Option
类,只需执行以下操作:类选项(对象): definit(自身): 使用_foo=False 使用条=真
然后假设}是
first
和{Option
的实例,您可以编写测试,就像:相关问题 更多 >
编程相关推荐