Unittest.testcase получает `Типерр: ошибка при вызове баз метаклас __init __ () занимает ровно 2 аргумента (4 дано)`

StackOverflow https://stackoverflow.com//questions/25066836

  •  23-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь добавить атрибуты на нетестовую проверку теста, но я продолжаю получать следующую ошибку. TypeError: Error when calling the metaclas bases __init__() takes exactly 2 arguments (4 given) Я управляю тестами с носом.

Но я передаю только один аргумент.self делает его двумя.Поэтому я понятия не имею, откуда от 3 и 4-го аргументов.Есть ли что-то в межкомплекции, я должен знать?или нос?

base_test.py

import unittest
from logUtils import logger

class Base_Test(unittest.TestCase):
    def __init__(self, p4rev):
        self.p4rev = p4rev

    def setUp(self):
        logger.critical(p4rev)
        triggerSomething(p4rev)
.

my_test.py

from Base_Test import Base_Test

rev = '12345'

class check_error_test(Base_Test(rev)):
    dosomething()
.

Это было полезно?

Решение

При нанесении от подразделения из класса ужина на ужин на синтаксис Python приходит как,

класс подкласс знамена (SuppperClassname): #Sub Класс Корпус

Но в вашем кодировании

class check_error_test(Base_Test(rev)):
    dosomething()
.

Вы разбираете экземпляр класса Base_test, но не класс.Base_Test(rev) создаст экземпляр класса base_test.

Вы можете изменить свой код как ниже.

class check_error_test(Base_Test):
    def __init__(p4rev):
        super(check_error_test).__init__(p4rev)
.

base_test - это также класс, который наследует от Unittest.testcase, поэтому вам нужно добавить в base_test.py:

class Base_Test(unittest.TestCase):
    def __init__(self, methodName='runTest', p4rev=None):
        super(Base_Test, self).__init__(methodName)
        self.p4rev = p4rev

    def runTest(self):
        pass
.

Trantest () был добавлен в класс Baseetest, просто чтобы избежать повышения ValueError по классу Unittest.teestcas.Unittest.testcase поднимает эту ошибку, если нет метода, который можно найти по имени, переданному параметру MODESNAME.

Below - это сегмент кода, который поднимает ValueError, который находится в Unittest.testcase. init ()

def __init__(self, methodName='runTest'):
        """Create an instance of the class that will use the named test
           method when executed. Raises a ValueError if the instance does
           not have a method with the specified name.
        """
        self._testMethodName = methodName
        self._resultForDoCleanups = None
        try:
            testMethod = getattr(self, methodName)
        except AttributeError:
            raise ValueError("no such test method in %s: %s" %
                  (self.__class__, methodName))
.

Другие советы

Попробуйте это:

from Base_Test import Base_Test

rev = '12345'

class check_error_test(Base_Test):
    def __init__(self):
        super(check_error_test, self).__init__(rev)

    dosomething()
.

Не работал, потому что вы были созданы создание Base_test при настройке наследования для check_error_test.Есть хороший раздел в Python Documentation на Super (),Если вы хотите узнать больше о том, как это работает.

Кроме того, я бы также рекомендовал бы использовать название класса для Checkerrortest и меняя Base_test до Baseetest, согласно которому Pep8 Руководство.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top