проблема: как ссылаться на объекты / переменные, созданные в декораторе из внедренного метода? - PullRequest
1 голос
/ 30 июня 2011

Я столкнулся с проблемой доступности объектов, созданных в декораторе и необходимых в методе test_case. Мой код, представленный ниже:

def execute_results_navigation(test_case):
    def wrapper(self,*args,**kwargs):
        result=Result()
        pagination=Pagination()
        results_page_index=1
        while results_page_index<=pagination.get_pages_number():

            for results_object_index in range(results.get_objects_number_per_single_page()):
                test_case(self,*args,**kwargs)

                pagination.set_active_page_number(results_page_index)
            results_page_index+=1

    return wrapper

Вместо test_case в метод «внедряется» следующий код (все происходит с использованием предопределенного декоратора):

@execute_results_navigation
def test_check_availability_of_search_results(self):
    """
    test case 2.22
    """
    offer=Offer()

    result.select_hotel(results_caller["button"],results_object_index)
    offer_price=offer.get_offer_object_details().price
    offer.verify_offer_availability(offer_price)
    offer.back_to_search_results()
Метод

test_case не имеет доступа к result, pagination объектам и results_object_index переменным. Все объекты были инициализированы при вызове декоратора. Возможно, я делаю что-то не так с этим методом, но я подумал, что эти экземпляры существуют в методе wrapper и доступ к ним не должен вызывать проблем.

1 Ответ

3 голосов
/ 30 июня 2011

Вы не сможете получить доступ к локальным переменным, определенным в оболочке в test_case.

Похоже, test_check_availability_of_search_results является методом экземпляра, поэтому один из способов решения вашей проблемы - присвоить эти переменные атрибутам 'self'.

...