Unittest.testcase получает `Типерр: ошибка при вызове баз метаклас __init __ () занимает ровно 2 аргумента (4 дано)`
-
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.
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 Руководство.