Я пытаюсь изучить pytest, и 1 тестовый пример продолжает давать сбой с подробностями, приведенными ниже

#!/usr/bin/python

-- кодировка: utf-8 --

# Я написал pytest в соответствии с #комментариями в файле test_invetory.py. Все тестовые случаи пройдены, но только 1 все еще не работает. может кто-нибудь помочь мне с ответами.

-------Данные файлы: inventory.py------

<>>>

class InsufficientException(Exception):

pass

класс MobileInventory:

def __init__(self, inventory=None):
    if inventory is None:
        self.balance_inventory = {}
    else:
        if not isinstance(inventory, dict):
            raise TypeError('Input inventory must be a dictionary')
        for model in inventory:
            if not isinstance(model, str):
                raise ValueError('Mobile model name must be a string'
                        )
            if not isinstance(inventory[model], int) \
                or inventory[model] < 0:
                raise ValueError('No. of mobiles must be a positive integer'
                        )
        self.balance_inventory = inventory

def add_stock(self, new_stock):
    if not isinstance(new_stock, dict):
        raise TypeError('Input stock must be a dictionary')
    for model in new_stock:
        if not isinstance(model, str):
            raise ValueError('Mobile model name must be a string')
        if not isinstance(new_stock[model], int) \
            or new_stock[model] < 0:
            raise ValueError('No. of mobiles must be a positive integer'
                             )
        if model in self.balance_inventory:
            self.balance_inventory[model] += new_stock[model]
        else:
            self.balance_inventory[model] = new_stock[model]

def sell_stock(self, requested_stock):
    if not isinstance(requested_stock, dict):
        raise TypeError('Requested stock must be a dictionary')
    for model in requested_stock:
        if not isinstance(model, str):
            raise ValueError('Mobile model name must be a string')
        if not isinstance(requested_stock[model], int) \
            or requested_stock[model] < 0:
            raise ValueError('No. of mobiles must be a positive integer'
                             )
        if model not in self.balance_inventory:
            raise InsufficientException('No Stock. New Model Request'
                    )
        if requested_stock[model] > self.balance_inventory[model]:
            raise InsufficientException('Insufficient Stock')
        self.balance_inventory[model] -= requested_stock[model]

--это файл (test_inventory.py), где я написал код согласно # комментариям ---

импортировать sys импортировать os

sys.path.append(os.getcwd())

Импортируйте класс MobileInventory и InsufficientException из модуля инвентаризации, используя выражение from proj.inventory import MobileInventory, InsufficientException.

from proj.inventory import MobileInventory, InsufficientException

Импортировать pytest, используя выражение import pytest.

import pytest

Используйте оператор assert для утверждения и для проверки. Например: assert 1 == 1

assert 1 == 1

Определите класс теста pytest 'TestingInventoryCreation'

класс TestingInventoryCreation:

Определите другой тестовый класс pytest 'TestInventoryAddStock', который проверяет поведение метода 'add_stock', со следующими тестами

class TestInventoryAddStock:

Определите другой тестовый класс pytest 'TestInventorySellStock', который проверяет поведение метода 'sell_stock', со следующими тестами

класс TestInventorySellStock:

.test/test_pytest.py::test_source_code[test_tescases1] PASSED [ 4%]

.test/test_pytest.py::test_source_code[test_tescases2] FAILED [ 9%]

.test/test_pytest.py::test_source_code[test_tescases3] PASSED [ 14%]

......

.test/test_pytest.py::test_pytest_testcase_result[test_testcase_result] PASSED [100%]

=================================== FAILURES ===================================

_______________________ test_source_code[test_tescases2] _______________________

inspect_get_sourcecode = " def test_creating_specified_inventory(self):\n i1 = MobileInventory({'iPhone Model X': 100, 'Xiaomi Model ...': 25})\n assert i1.balance_inventory == {'iPhone Model X': 100, 'Xiaomi Model Y': 1000, 'Nokia Model Z': 25}\n"

expected = ['\{\"iPhone\sModel\sX\"\:\s100,[\n\s]\"Xiaomi\sModel\sY\"\:\s1000,[\n\s]\"Nokia\sModel\sZ\"\:. ..odel\sX\"\:\s100,[\n\s]\"Xiaomi\sModel\sY\"\:\s1000,[\n\s]\"Nokia\sModel\sZ\"\:\s25\}\s*==.+)']

@pytest.mark.parametrize("obj, expected",

)

[(test_inventory.TestingInventoryCreation.test_creating_empty_inventory,

[r"MobileInventory()", r"(assert.+==\s*{}|assert\s*{}\s*==.+)"]),

(test_inventory.TestingInventoryCreation.test_creating_specified_inventory,

[

r"{"iPhone\sModel\sX":\s100,[\n\s]"Xiaomi\sModel\sY":\s1000,[\n\s]"Nokia\sModel\sZ":\s25}",

r"(assert. +==\s*{"iPhone\sModel\sX":\s100,[\n\s]"Xiaomi\sModel\sY":\s1000,[\n\s]"Nokia\sModel\sZ": \s25}|assert\s*{"iPhone\sModel\sX":\s100,[\n\s]"Xiaomi\sModel\sY":\s1000,[\n\s]"Nokia\sModel\sZ":\s25}\s*==. +)"

]),

(test_inventory.TestingInventoryCreation.test_creating_inventory_with_list,

[

r"["iPhone\sModel\sX",\s "Xiaomi\sModel\sY",\s "Nokia\sModel\sZ"]",

r "pytest.raises(TypeError",

r"(assert.+==\s*"Input\sinventory\smust\sbe\sa\sdictionary"|assert\s*"Input\sinventory\smust\sbe\sa\sdictionary"\s*==.+)"

]),

(test_inventory.TestingInventoryCreation.test_creating_inventory_with_numeric_keys,

[

r"{1:\s"iPhone\sModel\sX",[\n\s]*2:\s"Xiaomi\sModel\sY",[\n\s]*3:\s"Nokia\sModel\sZ"}",

r "pytest.raises(ValueError",

r"(assert.+==\s*"Mobile\smodel\sname\smust\sbe\sa\sstring"|assert\s*"Mobile\smodel\sname\smust\sbe\sa\sstring"\s*==.+)"

]),

(test_inventory.TestingInventoryCreation.test_creating_inventory_with_nonnumeric_values,

[

r"{"iPhone\sModel\sX":\s"100",[\n\s]"Xiaomi\sModel\sY":\s"1000",[\n\s]"Nokia\sModel\sZ":\s"25"}",

r "pytest.raises(ValueError",

r"(assert.+==\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"|assert\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"\s*==.+)"

>

]),

(test_inventory.TestingInventoryCreation.test_creating_inventory_with_negative_value,

[

r"{"iPhone\sModel\sX":\s-45,[\n\s]"Xiaomi\sModel\sY":\s200,[\n\s]"Nokia\sModel\sZ":\s25}",

r "pytest.raises(ValueError",

r"(assert.+==\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"|assert\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"\s*==.+)"

>

]),

(test_inventory.TestInventoryAddStock.setup_class,

[

r"@classmethod",

r"{"iPhone\sModel\sX":\s100,[\n\s]"Xiaomi\sModel\sY":\s1000,[\n\s]"Nokia\sModel\sZ":\s25}"

]),

(test_inventory.TestInventoryAddStock.test_add_new_stock_as_dict,

[

r "add_stock(",

r"{"iPhone\sModel\sX":\s50,[\n\s]"Xiaomi\sModel\sY":\s2000,[\n\s]"Nokia\sModel\sA":\s10}",

r"(assert. +==\s*{"iPhone\sModel\sX":\s150,[\n\s]"Xiaomi\sModel\sY":\s3000,[\n\s]"Nokia\sModel\sZ":\s25,[\n\s]"Nokia\sModel\sA": \s10}|assert\s{"iPhone\sModel\sX":\s150,[\n\s]"Xiaomi\sModel\sY":\s3000,[\n\s]"Nokia\sModel\sZ":\s25,[\n\s]"Nokia\sModel\sA":\s10}\s==. +)"

]),

(test_inventory.TestInventoryAddStock.test_add_new_stock_as_list,

[

r "add_stock(",

r "pytest.raises(TypeError",

r"["iPhone\sModel\sX",\s "Xiaomi\sModel\sY",\s "Nokia\sModel\sZ"]",

r"(assert.+==\s*"Input\sstock\smust\sbe\sa\sdictionary"|assert\s*"Input\sstock\smust\sbe\sa\sdictionary"\s*==.+)"

]),

(test_inventory.TestInventoryAddStock.test_add_new_stock_with_numeric_keys,

[

r "add_stock(",

r"{1:\s"iPhone\sModel\sA",[\n\s]*2:\s"Xiaomi\sModel\sB",[\n\s]*3:\s"Nokia\sModel\sC"}",

r "pytest.raises(ValueError",

r"(assert.+==\s*"Mobile\smodel\sname\smust\sbe\sa\sstring"|assert\s*"Mobile\smodel\sname\smust\sbe\sa\sstring"\s*==.+)"

]),

(test_inventory.TestInventoryAddStock.test_add_new_stock_with_nonnumeric_values,

[

r "add_stock(",

r"{"iPhone\sModel\sA":\s"50",[\n\s]"Xiaomi\sModel\sB":\s"2000",[\n\s]"Nokia\sModel\sC":\s"25"}",

r "pytest.raises(ValueError",

r"(assert.+==\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"|assert\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"\s*==.+)"

>

]),

(test_inventory.TestInventoryAddStock.test_add_new_stock_with_float_values,

[

r "add_stock(",

r"{"iPhone\sModel\sA":\s50.5,[\n\s]"Xiaomi\sModel\sB":\s2000.3,[\n\s]"Nokia\sModel\sC":\s25}",

r "pytest.raises(ValueError",

r"(assert.+==\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"|assert\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"\s*==.+)"

>

]),

(test_inventory.TestInventorySellStock.setup_class,

[

r"@classmethod",

r"{"iPhone\sModel\sA":\s50,[\n\s]"Xiaomi\sModel\sB":\s2000,[\n\s]"Nokia\sModel\sC":\s10,[\n\s]*"Sony\sModel\sD":\s1}"

]),

(test_inventory.TestInventorySellStock.test_sell_stock_as_dict,

[

r "sell_stock(",

r"{"iPhone\sModel\sA":\s2,[\n\s]"Xiaomi\sModel\sB":\s20,[\n\s]"Sony\sModel\sD":\s1}",

r"(assert. +==\s*{"iPhone\sModel\sA":\s48,[\n\s]"Xiaomi\sModel\sB":\s1980,[\n\s]"Nokia\sModel\sC":\s10,[\n\s]"Sony\sModel\sD": \s0}|assert\s{"iPhone\sModel\sA":\s48,[\n\s]"Xiaomi\sModel\sB":\s1980,[\n\s]"Nokia\sModel\sC":\s10,[\n\s]"Sony\sModel\sD":\s0}\s==. +)"

]),

(test_inventory.TestInventorySellStock.test_sell_stock_as_list,

[

r "sell_stock(",

r "pytest.raises(TypeError",

r"["iPhone\sModel\sA",\s "Xiaomi\sModel\sB",\s "Nokia\sModel\sC"]",

r"(assert.+==\s*"Requested\sstock\smust\sbe\sa\sdictionary"|assert\s*"Requested\sstock\smust\sbe\sa\sdictionary"\s*==.+)"

]),

(test_inventory.TestInventorySellStock.test_sell_stock_with_numeric_keys,

[

r "sell_stock(",

r"{1:\s"iPhone\sModel\sA",[\n\s]*2:\s"Xiaomi\sModel\sB",[\n\s]*3:\s"Nokia\sModel\sC"}",

r "pytest.raises(ValueError",

r"(assert.+==\s*"Mobile\smodel\sname\smust\sbe\sa\sstring"|assert\s*"Mobile\smodel\sname\smust\sbe\sa\sstring"\s*==.+)"

]),

(test_inventory.TestInventorySellStock.test_sell_stock_with_nonnumeric_values,

[

r "sell_stock(",

r"{"iPhone\sModel\sA":\s"2",[\n\s]"Xiaomi\sModel\sB":\s"3",[\n\s]"Nokia\sModel\sC":\s"4"}",

r "pytest.raises(ValueError",

r"(assert.+==\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"|assert\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"\s*==.+)"

>

]),

(test_inventory.TestInventorySellStock.test_sell_stock_with_float_values,

[

r "sell_stock(",

r"{"iPhone\sModel\sA":\s2.5,[\n\s]"Xiaomi\sModel\sB":\s3.1,[\n\s]"Nokia\sModel\sC":\s4}",

r "pytest.raises(ValueError",

r"(assert.+==\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"|assert\s*"No.\sof\smobiles\smust\sbe\sa\spositive\sinteger"\s*==.+)"

>

]),

(test_inventory.TestInventorySellStock.test_sell_stock_of_nonexisting_model,

[

r "sell_stock(",

r"{"iPhone\sModel\sB":\s2,[\n\s]*"Xiaomi\sModel\sB":\s5}",

r "pytest.raises(InsufficientException",

r"(assert.+==\s*"No\sStock.\sNew\sModel\sRequest"|assert\s*"No\sStock.\sNew\sModel\sRequest"\s*==.+)"

]),

(test_inventory.TestInventorySellStock.test_sell_stock_of_insufficient_stock,

[

r "sell_stock(",

r"{"iPhone\sModel\sA":\s2,[\n\s]"Xiaomi\sModel\sB":\s5,[\n\s]"Nokia\sModel\sC":\s15}",

r "pytest.raises(InsufficientException",

r"(assert.+==\s*"Insufficient\sStock"|assert\s*"Insufficient\sStock"\s*==.+)"

])

],

ids=['test_tescases1', 'test_tescases2', 'test_tescases3', 'test_tescases4', 'test_tescases5',

<>>>

'test_tescases6', 'test_tescases7', 'test_tescases8', 'test_tescases9', 'test_tescases10',

<>>.

'test_tescases11', 'test_tescases12', 'test_tescases13', 'test_tescases14',

<>>.

"test_tescases15",

'test_tescases16', 'test_tescases17', 'test_tescases18', 'test_tescases19',

<>>.

'test_tescases20'])

def test_source_code(inspect_get_sourcecode, expected):

code = autopep8.fix_code(inspect_get_sourcecode).replace("'", '"')

for exp in expected:

> assert bool(re.search(exp, code)))

E AssertionError

.test/test_pytest.py:163: AssertionError

=========================== краткая информация о тесте ============================

FAILED .test/test_pytest.py::test_source_code[test_tescases2] - AssertionError

========================= 1 не прошел, 20 прошли за 0.47с =========================

Вернуться на верх