Является ли хорошей практикой присваивать атрибуты классу тестера, которые будут использоваться другими тестами - PullRequest
0 голосов
/ 12 января 2019

Я пишу юнит-тесты для моего приложения на python с pytest.

В модуле, который я тестирую, есть много методов, которые будут вызываться последовательно, и их возвращаемые значения будут использоваться в качестве аргументов для других. Короче, у меня что-то вроде этого:

def foo_1():
    #load file and do stuff
    return bar_1

def foo_2(arg1):
    #do stuff with arg1
    return bar_2

def foo_3(arg1, arg2):
    #do stuff with arg1 and arg2
    return bar_3

x = foo_1()
y = foo_2(x)
z = foo_3(x,y)

Довольно простые вещи, и вот тесты, которые я запускаю:

import foo_app

class TestClass:

    def test_foo_1(self):
        self.x = foo_app.foo_1()

        #never mind the assertions
        assert 0 == self.x

    def test_foo_2(self):
        self.y = foo_app.foo_2(self.x)

        #never mind the assertions
        assert 1 == self.y

    def test_foo_3(self):
        self.z = foo_app.foo_3(self.x, self.y)

        #never mind the assertions
        assert 3 == self.z

Однако я хотел бы знать, является ли это хорошей практикой в ​​модульном тестировании, и если нет, то каков наилучший способ справиться с такого рода сценарием, где я полагаюсь на выполнение предыдущих методов для достижения моего результата?

1 Ответ

0 голосов
/ 12 января 2019

Вы можете достичь желаемого поведения, используя доходность. Который может быть использован для поддержания последовательности казней.

def foo_1():
    #load file and do stuff
    return bar_1

def foo_2(arg1):
    #do stuff with arg1
    return bar_2

def foo_3(arg1, arg2):
    #do stuff with arg1 and arg2
    return bar_3
def run():
    arg1 = foo_1()
    yield
    arg2 = foo_2(arg1)
    yield
    arg3 = foo_3(arg1,arg2)
    yield

for steps in run():
    pass

Проверьте этот ресурс, где он подробно объяснил, как он работает.
https://youtu.be/7lmCu8wz8ro?t=4635

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...