py.test灯具创建最佳实践

时间:2015-12-15 10:53:39

标签: python unit-testing pytest fixtures

我对单元测试和py.test很新。

我对测试有疑问。 我需要格式化来自Web服务的数据。 需要处理这些数据(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']}"

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

所以我从一个不可变的'创建夹具?数据并且不知道web服务发送的更改数据,或者我是否需要创建夹具,在这种情况下,它将是最接近现实的,但风险太依赖于外部行为(如404,例如500错误?

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

通常,您会使用测试数据夹具来设置一些静态或可编程的数据。

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

您应该使用哪种灯具数据取决于您最感兴趣的代码。例如,如果您的代码正在解析JSON响应,您是否要将fixture数据定义为原始JSON(即'{"foo": "bar"}')或解析后的JSON(即{'foo': 'bar'})?根据您对最重要的测试结果的判断,它取决于您。