Попытка устранить требование метода runTest - PullRequest
0 голосов
/ 24 июня 2019

Я работаю над большой кодовой базой, написанной на Python.Основной разработчик кода больше не работает для компании.

В коде есть автоматизированный пакет, который вместо использования автоматического обнаружения pytest вручную указывает, какие тесты нужно выполнить в серии TestClass.runTest (self)методов.

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

Если я просто исключу все методы runTest ивещи, которые, кажется, вызывают их, я получаю кучу:

_____________________________________________________________ ERROR at setup of TestRepo.test_checkin_checkout ______________________________________________________________
[gw5] linux2 -- Python 2.7.15 /usr/bin/python

self = <tests.repo_test.TestRepo testMethod=runTest>, args = ('test_checkin_checkout',), kwargs = {}

    def __init__(self, *args, **kwargs):
>       super(TestRepo, self).__init__()

repo_test.py:31: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
base/base_repo_test.py:15: in __init__
    super(BaseRepoTests, self).__init__(*args, **kwargs)
E   ValueError: no such test method in <class 'tests.repo_test.TestRepo'>: runTest

Я также пытался Google (много) о методах runTest (и methodName, который представляется аргументом TestFoo.__init__(self, methodName='runTest'), и я не нахожу много.

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

Может кто-нибудь подсказать, пожалуйста, как получился метод runTestТребуется?

Вот небольшой тестовый модуль, который не может зависеть от runTest:

"""Unit test for tf module."""


import unittest

import tf


class TestPc(unittest.TestCase):
    """Unit tests for tf module."""

    def __init__(self, methodName='runTest'):
        """Initialize."""
        super(TestPc, self).__init__(methodName)

    def setUp(self):
        """Set up for tests - but not really."""
        super(TestPc, self).setUp()
        self.foo = 'bar'

    def test_add_1(self):
        """Test tf.add_1."""
        assert tf.add_1(2) == 3

    def test_add_2(self):
        """Test tf.add_2."""
        assert tf.add_2(5) == 7

    def test_mult_3(self):
        """Test tf.mult_3."""
        assert tf.mult_3(11) == 33

    def runTest(self):
        """Run the tests."""
        self.test_add_1()


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

Заранее спасибо!

1 Ответ

0 голосов
/ 24 июня 2019

Глядя на исходный код модуля unittest, мне кажется, что метод "runTest" должен использоваться именно для ручного управления, непосредственного выполнения теста, более простого способа иметь тестовый пример только с одним тестовым сценарием или в качестве общей тестовой оболочки, определенной во время выполнения.
Кроме того, как отметил @Laurent LAPORTE в своем комментарии, он используется в качестве дозорного значения, позволяющего создавать экземпляр TestCase без имени метода для использования с интерактивным интерпретатором и отладкой.

При использовании обнаружения тестов игнорируется, если в классе есть какие-либо другие тесты ( эта строка ).

Поскольку вы получаете эту ошибку при использовании обнаружения тестов, это означает, что где-то в каком-то тесте или в некоторой функции пакета load_tests непосредственно создается экземпляр класса теста (например, TestPc())

Хорошим примером варианта использования функции runTest является перенос тестовой функции в TestCase, этот вариант использования даже реализован на модуле unittest как FunctionTestCase .

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