Как проверить простой класс стека с помощью Pytest - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь написать простой класс стека, чтобы узнать о TDD. но проблема в том, что он не проходит тест с использованием правильного кода.

вот код:

class Stack:
    def __init__(self):
        self.stack = []

    def push(self,new_item):
        self.stack.append(new_item)

    def pop(self):
        return int(self.stack.pop(0))

и вот тестовый класс:

import pytest
from Stack import Stack

def test_it_can_push():
    stack = Stack()
    stack.push(2)
    assert stack.stack is [2]

и вот ошибка:

    def test_it_can_push():
        stack = Stack()
        stack.push(2)
>       assert stack.stack is [2]
E       assert [2] is [2]
E        +  where [2] = <Stack.Stack instance at 0x7f2273491560>.stack

test_stack.py:7: AssertionError

Может кто-нибудь пожалуйста, подскажите, как решить эту проблему?

1 Ответ

1 голос
/ 31 мая 2019

Вы делаете проверку идентичности (id - место в памяти в CPython), используя is, который никогда не будет равен, так как операнды - это два разных списка (которые являются изменяемыми объектами), хотя они имеют одинаковые элементы, и вы можете проверить с помощью id.

Тест на справедливость:

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