我正在使用一个类,该类具有一个方法,该方法shuffle返回调用它的实例的洗牌版本。这是:
shuffled_object = unshuffled_object.shuffle(buffer_size)
我想模拟这个方法,这样当它被调用时,它会简单地返回自身,而不需要任何改组。以下将是这种情况的简化:
# my_test.py
class Test():
def shuffle(self, buffer_size):
return self
# test_mock
import unittest
import unittest.mock as mk
import my_test
def mock_test(self, buffer_size):
return self
class TestMock(unittest.TestCase):
def test_mock(self):
with mk.patch('my_test.Test.shuffle') as shuffle:
shuffle.side_effect = mock_test
shuffled_test = my_test.Test().shuffle(5)
但是,当我尝试此操作时,出现以下错误:
TypeError: mock_test() missing 1 required positional argument: 'buffer_size'
该方法仅使用参数5调用,调用实例并未将自身作为self参数传递给该方法。是否可以使用模块实现这种行为unittest.mock?
编辑:
真正的代码是这样的:
# input.py
def create_dataset():
...
raw_dataset = tf.data.Dataset.from_generator(data_generator, output_types, output_shapes)
shuffled_dataset = raw_dataset.shuffle(buffer_size)
dataset = shuffled_dataset.map(_load_example)
...
return dataset
# test.py
def shuffle(self, buffer_size):
return self
with mk.patch(input.tf.data.Dataset.shuffle) as shuffle_mock:
shuffle_mock.side_effect = shuffle
dataset = input.create_dataset()
这里最大的问题是我只想模拟该shuffle方法,因为我不希望它在测试时是随机的,但我想保留其余的原始方法,以便我的代码可以继续工作。棘手的部分是,shuffle它不仅打乱调用它的实例,而且返回打乱的实例,所以我想在测试时返回数据集的未打乱版本。
另一方面,让 mock 继承并不是那么简单,tf.data.Dataset因为据我了解,它Dataset似乎是一个带有抽象方法的抽象类,我想从Dataset初始化程序from_generator创建的任何子类型中抽象出自己。
慕容森
侃侃尔雅
莫回无
暮色呼如
随时随地看视频慕课网APP
相关分类