小编use*_*000的帖子

如何在 Python 的单元测试框架中模拟返回 self 的方法

我使用的类有一个方法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)

python unit-testing python-unittest

5
推荐指数
1
解决办法
5466
查看次数

标签 统计

python ×1

python-unittest ×1

unit-testing ×1