Python单元测试相关功能

时间:2019-03-19 11:50:24

标签: python unit-testing mocking pytest

我正在使用pytest编写一些单元测试,并且想知道测试“依赖”功能的最佳方法是什么。假设我有两个功能:

def set_file(filename, filecontents):
    # stores file as key in memcache

def get_file(filename):
    # returns the contents of the filename if it exists in cache

当前,我有一个“快乐之路”单元测试,看起来像这样:

def test_happy_path():
    assert not get_file('unit test') # check that return of non-existent file is None
    set_file('unit test', 'test content') # set file contents
    assert get_file('unit test') == 'test content'  # check that return matches input

我的问题是这种方法是否有效?在测试set_file来进行没有get_file创建的依赖关系的单元测试时,是否应该尝试模拟set file的数据?如果是这样,我将如何模拟,尤其是由于set_file正在使用pymemcached?

1 个答案:

答案 0 :(得分:1)

您的单元测试看起来非常有效。在测试期间将文件设置为pymemcache并没有什么害处,因为所有内容都保留在本地内存中。在测试中具有这样的“设置”依赖项也完全可以。

如果您发现开始有多个测试依赖于相同的设置,则可以使用pytest fixtures来设置此类设置和拆卸依赖。示例代码可能如下所示:

import pytest

FILENAME = "test-file"
TEST_CONTENT = "some content"


@pytest.fixture()
def set_file_contents():
    assert not get_file(FILENAME)
    set_file(FILENAME, TEST_CONTENT)
    yield FILENAME, TEST_CONTENT  # These values are provided to the test
    delete_file(FILENAME)  # This is run after the test
    assert not get_file(FILENAME)


class TestFileContents:

    def test_get_file(self, set_file_contents):
        filename, file_contents = set_file_contents
        assert get_file(filename) == file_contents

在您的情况下,使用固定装置实在是太过分了,但是您已经了解了基本概念。