NameError: имя 'METHOD_NAME' не определено Python Unittest - PullRequest
2 голосов
/ 05 марта 2020

У меня есть следующая структура проекта: enter image description here

Код для каждого файла следующий (ничего не включено в init . py):

my_sum.py

from service import calculate_sum

def main():
    calculate_sum.create_sum()

if __name__ == "__main__":
    main()

Рассчитать_сум.py :

def calculate(arg):
    total = 0
    for val in arg:
        total += val
    return total

def create_sum():
    print("hello")
    total = calculate([5, 5])
    print(total)

test_sum.py:

import unittest

from dir import *

class TestSum(unittest.TestCase):
    def test_list_int(self):
        """
        Test that it can sum a list of integers
        """
        data = [1, 2, 3]
        result = calculate(data)
        self.assertEqual(result, 6)

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

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

Когда я запускаю python -m unittest discover -s test/ из каталога MainDir, я получаю ошибка:

testsum.py ", строка 11, в test_list_int result = execute (data) NameError: имя 'Calculate' не определено

Однако, если я измените метод «вычисления» на «сумму» (т. е. ниже), мой тест выполняется нормально. Примечание: Я должен отметить, что я скопировал этот пример с сайта в Интернете, и поэтому я думаю, что «сумма» определяется где-то, но я не совсем уверен, где и, следовательно, не знаю, почему происходит ошибка.

Изменение calc_sum.py на следующие проходы тест:

def sum(arg):
    total = 0
    for val in arg:
        total += val
    return total

def create_sum():
    print("hello")
    total = sum([5, 5])
    print(total)

testsum.py :

import unittest

from dir import *

class TestSum(unittest.TestCase):
    def test_list_int(self):
        """
        Test that it can sum a list of integers
        """
        data = [1, 2, 3]
        result = sum(data)
        self.assertEqual(result, 6)

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

---------- -------------------------------------------------- ---------- Пробежал 1 тест за 0.000 с

ОК

1 Ответ

2 голосов
/ 05 марта 2020

sum(_iterable) - это встроенный метод в python. Поэтому он не вызвал ваш метод, но вызвал встроенный метод.

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

Добавьте from MainDir.dir.service.calculate_sum import calculate в свой тестовый модуль, все должно работать нормально.

...