Юнит-тестирование файла путем вызова его из другого файла в Python

Я новичок в модуле unnitest. У меня есть файл, в котором есть unittest. Файл что-то вроде...

Файл1.py

class ABC (unittest.TestCase):
    def setUp(self):
        # Do some work here

    def test_123(self, a,b,c):
        # Do some work here

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

*Теперь я вызываю этот файл из другого файла, передавая значения функции "test_123".* Но python отображает следующую ошибку. Может ли кто-нибудь помочь!

Traceback (most recent call last):
File "caller_file.py", line 20, in <module>
r = file1.ABC()
File "/usr/lib/python2.7/unittest/case.py", line 191, in __init__
(self.__class__, methodName))
ValueError: no such test method in <class 'file1.ABC'>: runTest

person Saheb    schedule 03.02.2014    source источник


Ответы (2)


Вы можете запустить тестовый пример file1.ABC следующим образом:

import unittest
import file1

suite = unittest.TestLoader().loadTestsFromTestCase(file1.ABC)
unittest.TextTestRunner(verbosity=2).run(suite)

Также вам нужно добавить аргумент self к методам setUp и test_123, а self должен быть единственным аргументом.

person Nigel Tufnel    schedule 03.02.2014
comment
Вы удалили строку r = file1.ABC() из File2.py? - person Nigel Tufnel; 03.02.2014
comment
Хорошо, это работает [Тестовый пример]. Но теперь я не могу передать значение функции test_123 из file2.py . Помогите снова. - person Saheb; 03.02.2014
comment
Вы не можете напрямую передавать аргументы методам test_*. Взгляните на этот ответ для обходного пути: stackoverflow.com/a/2081750/1240162 - person Nigel Tufnel; 03.02.2014
comment
На самом деле я читаю файл .txt в File2.py и анализирую его для отправки значений в File1.py. Так что аргументы командной строки, я думаю, не помогут. - person Saheb; 03.02.2014

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

Я решил это, создав

my_env = os.environ.copy()
        if not 'PYTHONPATH' in my_env:
            my_env['PYTHONPATH'] = ''

        my_env['PYTHONPATH'] += ';' + ';'.join(
                                    [os.path.abspath('.'),
                                    os.path.abspath('..'),
                                    os.path.abspath('..\\..')])

а потом вызов файла

_ = subprocess.check_output(filepath, shell=True, env=my_env)

Я просто добавил текущую среду пути, потому что вызывающий файл находится в тех же каталогах. Возможно, вам придется это скорректировать.

person Kuishi    schedule 03.02.2014