Как создать класс очереди для очередей некоторых списков? - PullRequest
1 голос
/ 20 апреля 2019

Я пытаюсь решить-Eight_Puzzle с помощью алгоритма BFS. поэтому мне нужна была очередь для хранения каждого состояния (например, [None, 1, 2, 3, 4, 5, 6, 7, 8]).

Вот мой Queue класс:

class Queue():

    def __init__(self):
        self.queue = []

    def enqueue(self, number):
        self.queue.append(number)

    def dequeue(self):
        return self.queue.pop(0)

и я написал тест-кейс для проверки этой функции с помощью pytest

def test_it_handles_lists_correctly():
    queue = Queue()
    queue.enqueue([1,2,3])
    assert list(queue.dequeue()) is [1,2,3]

но когда я запускаю тест, он выходит из строя с этим сообщением:

=========================== test session starts ===========================
platform win32 -- Python 3.7.0, pytest-4.3.1, py-1.8.0, pluggy-0.9.0
rootdir: C:\Users\Administrator\Desktop\code-ai\ai-eight-puzzle\eight-puzzle, inifile:
collected 10 items                                                         

test_helpers.py ..                                                   [ 20%]
test_puzzle.py ......                                                [ 80%]
test_queue.py .F                                                     [100%]

================================ FAILURES =================================
_____________________ test_ic_handles_lists_correctly _____________________

    def test_ic_handles_lists_correctly():
        queue = Queue()
        queue.enqueue([1,2,3])
>       assert list(queue.dequeue()) is [1,2,3]
E       assert [1, 2, 3] is [1, 2, 3]
E        +  where [1, 2, 3] = list([1, 2, 3])
E        +    where [1, 2, 3] = <bound method Queue.dequeue of <Queue.Queue
object at 0x028F5AD0>>()
E        +      where <bound method Queue.dequeue of <Queue.Queue object at
0x028F5AD0>> = <Queue.Queue object at 0x028F5AD0>.dequeue

test_queue.py:20: AssertionError
=================== 1 failed, 9 passed in 0.17 seconds ====================

Может кто-нибудь помочь мне это исправить?

1 Ответ

1 голос
/ 20 апреля 2019

Ваше определение Queue в порядке, но вы должны исправить свой тест.

Используйте в своем утверждении оператор сравнения == вместо is или , убедитесь, чтовы утверждаете тот же экземпляр:

def test_it_handles_lists_correctly():
    queue = Queue()
    my_list = [1,2,3]
    queue.enqueue(my_list)
    assert queue.dequeue() is my_list

Оператор is соответствует не значениям переменных, а самим экземплярам.

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