我有一个正在测试的类,它在__init__
中公开了一个参数,仅用于测试。看起来像这样
class MyClass(object):
def __init__(self, start_time=None):
if start_time is None:
start_time = time.time()
在我的测试中,我想使用假时间传递start_time,所以我首先在setUp()
中获得时间,然后将其传递给每个测试方法。
class MyclassTest(TestCase):
def setUp(self):
self.fake_start_time = time.time()
def test_one(self):
x = MyClass(start_time=self.fake_start_time)
...
def test_two(self):
x = MyClass(start_time=self.fake_start_time)
...
这一切都有效,但我想知道是否有办法避免在每次测试中都写start_time=self.fake_start_time
。我可以以某种方式替换__init__
中setUp()
方法的默认参数吗?
我想出了一个丑陋的方法,但想知道是否有更标准的方法,可能基于mock.patch
?
答案 0 :(得分:1)
在setUp
中创建一个类的实例:
def setUp(self)
self.fake_start_time = time.time()
self.x = MyClass(start_time=self.fake_start_time)
答案 1 :(得分:1)
functools.partial
可用于预绑定参数。因此,在这种情况下,您可以将时间绑定到类构造函数,然后使用绑定的构造函数而不传递其他参数:
from functools import partial
class MyclassTest(TestCase):
def setUp(self):
# Feel free to use a shorter name
self.FakeTimeMyClass = partial(MyClass, time.time())
def test_one(self):
x = self.FakeTimeMyClass()
...
def test_two(self):
x = self.FakeTimeMyClass()
...