我正在使用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?
答案 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
在您的情况下,使用固定装置实在是太过分了,但是您已经了解了基本概念。