py.test 夹具创建最佳实践



我对单元测试和py.test相当陌生。

我对测试有疑问。我需要格式化来自网络服务的数据。这些数据(xml,json或其他(需要处理,某些部分需要提取并作为内置的python类型(list,dict,collection等(返回。

如果我需要创建一个测试方法来检查数据格式是否正确,我是否需要使用直接来自 Web 服务的夹具,或者我是否需要从 Web 服务提供的数据的表示形式创建夹具?

例如:

tests.py

def test_well_formated_data(the_fixture):
    assert isintance(formatting_method(the_fixture), list)
    # and other assertion...

conftests.py

@pytest.fixture
def the_fixture()
    return Webservices.connect()

或者对于表示:

@pytest.fixture
def the_fixture()
    # Here is the same string returned by the webservices
    # each time it's called
    return "{'foo': [ 'bar', 'spam', 'egg']}"

在我读过的一些书籍或教程中,目的是检查输入是否按预期处理和返回。对于输入,当前数据的"快照"就足够了。

那么我是否从"不可变"数据创建夹具,并且不知道 Web 服务发送的更改数据,或者我是否需要创建在这种情况下最接近现实但有风险过于依赖外部行为的夹具(例如,例如 404、500 错误(?

提前谢谢。

通常,您不会针对外部服务进行测试,而是确保您自己的应用程序在处理和处理方面是正确的。

在您的情况下,您可以对 Web 服务进行猴子修补(即实现一个返回一些数据片段的虚拟人(并测试您的代码是否按预期处理它们。

通常,您将使用测试数据夹具来设置一些静态或可通过编程方式表达的数据。

当我为与外部服务的交互编写单元测试时,通常我会手动调用外部服务并保存响应。然后,我将创建一个返回响应的测试夹具 - 我将在测试中使用此夹具。

您应该使用哪些夹具数据实际上取决于您最感兴趣的测试代码。例如,如果您的代码正在解析 JSON 响应,您是否要将灯具数据定义为原始 JSON(即 '{"foo": "bar"}' ( 或作为解析的 JSON(即 {'foo': 'bar'} (?这取决于你对测试最重要的内容的判断。

最新更新