Pytest - как я могу проверить попробовать и кроме кода - PullRequest
0 голосов
/ 08 декабря 2018

Итак, у меня есть эта строка кода, как я могу протестировать пробу, кроме части, используя pytest?Я хочу проверить, если я введу строку, тест заметит это и ответ, сообщающий о неправильном вводе, и если я введу целое число, тест будет пройден.помогите пожалуйста спасибо

def add_member(self):
        p_name = input("Enter your project name: ")
        i = 0
        participant_name=[]
        role=[]
        while True:
            try:
                many = int(input ("How many member do you want to add ?: "))
                while i< many:
                    i+=1
                    participant_name.append(str(input("Enter name: "))  )
                    role.append(str(input("Enter role: ")))
                break
            except ValueError:
                print("Insert an integer")
        self.notebook.add_member(p_name, participant_name, role)

1 Ответ

0 голосов
/ 08 декабря 2018

Во-первых, у вас слишком много кода в блоке try.Единственное, что там вызывает ValueError (что точно указано в вашем сообщении об ошибке), это вызов int в первой строке.Во-вторых, не кодируйте input в коде, который вы планируете тестировать;вместо этого передайте второй аргумент, который по умолчанию - input, но позволяет вам предоставить детерминированную функцию для тестирования.

def add_member(self, input=input):
    p_name = input("Enter your project name: ")
    participant_names = []
    roles = []
    while True:
        try:
            many = int(input("How many member do you want to add? "))
            break
        except ValueError:
            print("Enter an integer")

    for i in range(many):
        name = input("Enter name: ")
        role = input("Enter role: ")
        participant_names.append(name)
        roles.append(role)
    self.notebook.add_member(p_name, participant_names, roles)

def make_input(stream):
    def _(prompt):
        return next(stream)
    return _

def test_add_member():
    x = Foo()
    x.add_member(make_input(["Manhattan", "0"])
    # assert that x.notebook has 0 participants and roles

    x = Foo()
    x.add_member(make_input(["Omega", "ten", "2", "bob", "documentation", "alice", "code"]))
    # assert that self.notebook has bob and alice in the expected roles

Тем не менее, еще лучше код, запрашивающий вводвероятно, должен быть полностью отделен от метода this, который должен просто брать имя проекта и набор участников и их роли (, а не два отдельных списка).Этот набор может быть списком кортежей или диктовкой, но это должно быть то, что не допускает несоответствия между именами каждого участника и их ролями.

def add_member(self, name, participants):
    self.notebook.add(name, [x[0] for x in participants], [x[1] for x in participants])

def test_add_member():
    x = Foo()
    x.add_member("Manhattan", [("bob", "documentation"), ("alice", "code")])
    # same assertion as before
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...