Каков протокол загрузки тестовых наборов для носа и юнит-теста? - PullRequest
0 голосов
/ 07 мая 2019

Я использовал протокол unittest load_tests(), потому что я хочу, чтобы мои автоматические тесты включали doctest, но только для одного модуля.Это прекрасно работает, когда обнаруживается и запускается с помощью unittest, но не работает, если вместо этого запускается nose.

import doctest
import unittest

import my.module

suite = doctest.DocTestSuite(my.module)

def load_tests(loader, std, pat): # invoked by unittest discovery process
    return suite

Ошибка:

Traceback (most recent call last):
  File "/g/data/w85/brl654/conda/envs/haz/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
TypeError: load_tests() takes exactly 3 arguments (0 given)

Если я сделаю эти аргументы необязательными, будет ли nose запускать тесты?Есть ли лучший способ интегрировать этот набор тестов, чтобы он мог запускаться либо unittest, либо nose?

1 Ответ

0 голосов
/ 08 мая 2019

Сложность в том, что nosetests обычно ищет комбинацию подклассов unittest.TestCase и функций с именами, похожими на тест. unittest.TestSuite не является ни подклассом TestCase, ни функцией, поэтому его нельзя подхватить носом. (Более того, нос по ошибке принимает load_tests и пытается запустить его в качестве тестовой функции , в отличие от протокола загрузки тестов unittest.)

Необработанный раствор:

load_tests.__test__ = False # instruct nose to skip load_tests()
def test_with_nose():
    assert suite.run(unittest.TestResult()).wasSuccessful()
...