如何使用所有可能的构造函数参数排列来测试对象/类?

时间:2019-07-18 05:47:14

标签: python unit-testing pytest python-unittest

我要使用pytest测试下一个课程:

class Analysis(object, metaclass=abc.ABCMeta):

    def __init__(self, filters, and_operator, filters_comb_type):
        self.filters = filters
        self.andOperator = and_operator
        self.filtersComb_type = filters_comb_type

    def _generate_defaultfilters_combination(self):
        ...

    def _generate_allfilters_combinations(self):
        ...

    def _check_filters(self, pattern_indexes, direction=None):
        ...

因此,我想使用filtersand_operatorfilters_comb_type的一组不同的可能值来创建许多可能的Analysis()。

所以我用pytest编写了下一个代码:

import pytest
from src.statistical_analysis.analysis import Analysis, FiltersCombinationType
from tests.analysis_filters.mocks_analysis_filter import *


@pytest.fixture(params=[[],
                        [MockAllwaysTrueAnalysisFilter()],
                        [MockAllwaysFalseAnalysisFilter()],
                        [MockEvenTrueOddFalseAnalysisFilter()],
                        [MockAllwaysTrueAnalysisFilter(), MockAllwaysFalseAnalysisFilter(), MockAllwaysFalseAnalysisFilter()]])
def filters(request):
    return request.param


@pytest.fixture(params=[True, False])
def and_operator(request):
    return request.param


@pytest.fixture(params=[FiltersCombinationType.ONLY_DEFAULTS,
                        FiltersCombinationType.ONE_COMBINATION,
                        FiltersCombinationType.ALL_COMBINATIONS])
def filters_comb_type(request):
    return request.param


@pytest.fixture
def analysis():
    a = Analysis(filters, and_operator, filters_comb_type)
    return a

因此,如果我很了解,那么analysis()功能将创建Analysis()对象的所有可能组合。

但是,当我想编写代码来测试Analysis类的3种方法时,我的问题就来了,因为如果我这样写:

def test_check_filters(analysis):
    ...

该测试将与在固定装置中创建的整个Analysis对象中的每个对象一起调用,但是现在我如何才能将每个Analsysis与他的check_filters()方法的预期返回值进行比较?

当我们想测试一个类的方法创建一个具有不同构造函数参数的类实例时,我想知道哪个方法是正确的。

0 个答案:

没有答案