Неполадки при выполнении Python юнит-теста в классе - PullRequest
0 голосов
/ 20 февраля 2020

У меня проблемы с выполнением простого юнит-теста в классе, который я создал. Я получаю эту ошибку:

AssertionError: <<strong> main .MathClass объект в 0x7fc7e0340940>! = 18

import unittest

class MathClass:
    def __init__(self):
        self.result = 0

    def add(self, num, *nums):
        self.result += num + sum(nums)
        return self

    def subtract(self, num, *nums):
        self.result -= (num + sum(nums))
        return self


class MathTest(unittest.TestCase):
    def testAdd(self):
        self.assertEqual(self.result.add(4,5,9), 18)

    def setUp(self):
        self.result = MathClass()


if __name__ == "__main__":
    unittest.main()

1 Ответ

1 голос
/ 20 февраля 2020

В вашем модульном тесте вы создаете объект результата, который является MathClass объектом `:

def setUp(self):
    self.result = MathClass()

Позже вы вызываете метод add объекта MathClass. Проблема в том, что ваш метод add возвращает self, например, сам объект Math.

def add(self, num, *nums):
    self.result += num + sum(nums)
    return self

Внутренне, MathClass.result может быть изменен, но add по-прежнему возвращает объект Math.

Поэтому ваша проверка assertEquals сравнивает объект Math и int (18). Которые не равны:)

Если вы хотите сохранить имена переменных, вы можете создать локальную переменную, которая получает результат объекта MathClass и сравнивает его со значением 18:

def testAdd(self):
    self.result.add(4,5,9)
    value = self.result.result
    self.assertEqual(value, 18)

или любым другим вариант, который вы найдете более подходящим.

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