2015-04-14 1 views
0

I ma new для написания модульных тестов python. У меня есть метод в классе, возвращающем ответ Json из API. Ответ JSON содержит такие атрибуты, как данные, токен, имя объекта и статус. Метод обращается к API и каждый раз возвращает ответ с разными значениями, поэтому я не могу записать код и проверить его. Как написать единичный тест для этого типа метода.Python Unittest для возвращаемого метода json string

Одна вещь, я думал, это проверить, не отвечает ли ответ. Есть ли другие типы проверок, которые я могу сделать здесь.

Каждый раз, когда он возвращает другой токен, дату (временная метка). Статус будет таким же.

def Json_get_status(self): 
    get_url = "xxxx" #URL to hit API 
    r = requests.get(get_url) 
    self.get_json = json.loads(r.text) 
    self.get_token=self.get_json["token"] 
    self.get_date=self.get_json["date"] 
    self.get_status=self.get_json["status"] 
    return self.get_json 
+1

Будет ли все * данных отличаться каждый раз, или есть некоторые поля, на которые вы можете проверить? Не могли бы вы проверить, что все поля имеют правильный тип или в соответствующих диапазонах? Могли бы вы издеваться над вызовом API? Что именно вы пытаетесь проверить? – jonrsharpe

+0

Просто сделанный отредактированный вопрос. Да, я могу попытаться высмеять вызов API. Я пытаюсь проверить, правильно ли этот метод правильно считывает состояние из ответа Json. – Santhosh

+0

Это может быть проще, если вы разделите его на несколько отдельных частей - проверка того, может ли метод правильно разобрать строку JSON, должен быть тривиальным. Не могли бы вы опубликовать этот метод с минимальным скелетом класса? – jonrsharpe

ответ

0

Если ваш тестируемый метод должен «правильно считывать состояние», то вы можете специально его проверить.

Так предполагая, ваше приложение является чем-то вроде

def read_status(response): 
    parsed = json.loads(response) 
    # does other stuff 
    return something 

Затем в test_unit.py

def test_read_status(self): 
    mock_input_val = {'something': 'good val'} 
    expected_positive_return_val = something 
    self.assertEqual(read_status(json.dumps(mock_input_val)),  
        expected_positive_return_val) 

Также хорошо, чтобы сделать отрицательный тест на состояние, при котором read_status либо не удается разобрать объект JSON или обнаруживает ошибку в ответе.

+0

Да, но его не получают json в качестве аргумента. он каждый раз проверяет API, а затем использует этот ответ JSON (внутренний для метода). – Santhosh

+0

На основе кода, который вы предоставили, я бы предложил сделать внутреннюю функцию, которая получает вывод json.loads (resp.text), а затем проверит эту функцию. Таким образом, вы отключите сетевую и бизнес-логику. В модульном тестировании не так много значения, что просто выдает HTTP-получение. Вы можете усложниться с макетными сервисами, но начать просто хорошо. –

 Смежные вопросы

  • Нет связанных вопросов^_^