Как установить значения полей в namedTuple на Python? - PullRequest
0 голосов
/ 31 октября 2019

В моем pytest (python 3.7.4) у меня есть метод теста, который определяет и устанавливает значения для полей namedtuple. Но на самом деле я не вижу никаких значений, установленных в поле, хотя я устанавливаю значения в своем коде.

def test_TapVisaCardOnTheReader(Process):
    ResponseResults = namedtuple('ResponseResults',['STATUS', 'ISO8583', 'TOKEN', 'ICC_PUBLIC_KEY'])
    ResponseResults('01', True, True, True)
    TapResponseResults=Process.TappingPaymentCardOntheReader(' Visa-Card ')
    assert ((ResponseResults.STATUS == TapResponseResults.STATUS) and (
            ResponseResults.ISO8583 == TapResponseResults.ISO8583) and (
                    ResponseResults.TOKEN == TapResponseResults.TOKEN) and (
                    ResponseResults.ICC_PUBLIC_KEY == TapResponseResults.ICC_PUBLIC_KEY))

Пожалуйста, проверьте следующее окно вывода отладочной информации, где я не вижу никаких установленных значений.

OutputWindow Также у меня есть еще один вопрос о сравнении полей namedtuple. В моем коде мне пришлось сравнивать все поля namedtuple, вместо этого есть ли способ сравнитьвсе поля namedtuple одновременно.

1 Ответ

0 голосов
/ 31 октября 2019

В этой части кода вы создаете объект ResponseResults, не сохраняя его:

ResponseResults = namedtuple('ResponseResults',['STATUS', 'ISO8583', 'TOKEN', 'ICC_PUBLIC_KEY'])
ResponseResults('01', True, True, True)

То, что вы на самом деле хотите:

ResponseResults = namedtuple('ResponseResults',['STATUS', 'ISO8583', 'TOKEN', 'ICC_PUBLIC_KEY'])
response_results = ResponseResults('01', True, True, True)
# continue with response_results...

Редактировать: По второму вопросу:если вы хотите сравнить все поля двух именованных кортежей напрямую, вы можете использовать оператор ==:

from collections import namedtuple

ResponseResults = namedtuple('ResponseResults',['STATUS', 'ISO8583', 'TOKEN', 'ICC_PUBLIC_KEY'])
response_results = ResponseResults('01', True, True, True)
response_results_2 = ResponseResults('01', True, True, True)
response_results_3 = ResponseResults('01', True, True, False)

response_results == response_results_2 # this is True
response_results == response_results_3 # this is False
...