2017-02-09 7 views
0

Недавно я изменил использование носа в нос2, однако многие мои тестовые коды, похоже, нарушили этот процесс. Одна вещь, в частности, является переменной инициализации я поставил в моем тестовом классе «self.mir_axis» дает эту ошибку:__init__ переменная не найдена в тестовом классе?

mirror_index = mirror_matrix.index(self.mir_axis) 
AttributeError: 'TestConvert' object has no attribute 'mir_axis' 

Это используется для работы с носом, но с nose2 моей инициализации переменной для некоторых причина больше не регистрируется. Я что-то упустил? Im, использующий python 2.7.3, и eclipse в качестве IDE кстати.

from nose2.compat import unittest 
from nose2.tools import params 
from nose2 import session 
from nose2.events import ReportTestEvent 
from nose2.plugins import testid 
from nose2.tests._common import (FakeStartTestEvent, FakeLoadFromNameEvent, 
           FakeLoadFromNamesEvent, TestCase)# 
# Import maya modules 
import maya.cmds as mc 
# Absolute imports of other modules 
from neo_autorig.scripts.basic import name 
from neo_autorig.scripts.basic import utils 

# Test class for converting strings 
class TestConvert(TestCase): 
    counter = 0 # counter to cycle through mir_axes 

    def _init__(self): 
     mir_axes = ['xy', '-xy', 'yz', '-yz'] # different axes to be applied 
     self.mir_axis = mir_axes[self.__class__.counter] 
     self.__class__.counter += 1 # increase counter when run 
     if self.__class__.counter > 3: 
      self.__class__.counter = 0 # if counter reaches max, reset 
     self.utils = utils.Utils(self.mir_axis, False) # pass module variables 

    def setUp(self): # set up maya scene 
     side_indicator_l = mc.spaceLocator(n='side_indicator_left')[0] 
     side_indicator_r = mc.spaceLocator(n='side_indicator_right')[0] 
     mirror_matrix = ['xy', '-xy', 'yz', '-yz'] 
     trans_matrix = ['tz', 'tz', 'tx', 'tx'] 
     side_matrix = [1, -1, 1, -1] 
     mirror_index = mirror_matrix.index(self.mir_axis) 
     mc.setAttr(side_indicator_l+'.'+trans_matrix[mirror_index], side_matrix[mirror_index]) 
     mc.setAttr(side_indicator_r+'.'+trans_matrix[mirror_index], side_matrix[mirror_index]*-1) 

    def tearDown(self): # delete everything after 
     mc.delete('side_indicator_left', 'side_indicator_right') 

    def test_prefix_name_side_type(self): # test string 
      nc = name.Name('prefix_name_side_type') 
      existing = nc.get_scenenames('transform') 
      self.assertEqual(nc.convert('test', 'empty', self.utils.find_side('side_indicator_left'), 
       'object', existing), 'test_empty_l_object') 
      self.assertEqual(nc.convert('test', 'empty', self.utils.find_side('side_indicator_right'), 
       'object', existing), 'test_empty_r_object') 

# run if script is run from inside module 
if __name__ == '__main__': 
    import nose2 
    nose2.main() 

ответ

1

Я вижу две проблем с сниппеты вы публикуемыми:

Первым из def _init__(self): отсутствующего подчеркивания; она должна быть def __init__(self):

второй (и, кажется, причиной ошибки) является тот факт, что первая строка в _init__, mir_axes = ['xy', '-xy', ..., должно быть self.mir_axes = ...

Редактировать

Вы должны использовать setUp вместо __init__ независимо от Ned BatchelderCoverage.py славы. :)

+0

О, должен пропустить этот код для редактирования, чтобы он соответствовал носу2. Теперь я получаю сообщение об ошибке 'TypeError: __init __() принимает ровно 1 аргумент (2 данных)' –