我使用的类有一个方法shuffle,该方法返回调用它的实例的打乱版本。这是:
shuffled_object = unshuffled_object.shuffle(buffer_size)
我想模拟这个方法,以便在调用它时,它只返回自身,而不进行任何改组。以下是这种情况的简化:
# my_test.py
class Test():
def shuffle(self, buffer_size):
return self
Run Code Online (Sandbox Code Playgroud)
# 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)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这样做时,我收到以下错误:
TypeError: mock_test() missing 1 required positional argument: 'buffer_size'
Run Code Online (Sandbox Code Playgroud)
仅使用参数调用该方法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)
... …Run Code Online (Sandbox Code Playgroud)