2015-11-12 7 views
0

В моем test.py у меня есть:Как получить сообщение об ошибке из ValidationError?

with self.assertRaises(ValidationError): 
    validate_zipfile(test_zip_path + '.zip') 

И это работает, как предполагалось. Я также хочу, чтобы получить доступ сообщения об ошибке это ValidationError поднимает, так что я могу это сделать:

self.assertEqual(#error that I extract from the code above, 'Zip file not in correct format.') 
+0

Можете ли вы просто написать свою собственную пробную версию, кроме как здесь, чтобы проверить, что вы хотите? – shuttle87

+2

@ shuttle87: это о unittesting, для которого есть удобная структура, чтобы делать утверждения об исключениях. –

+1

@MartijnPieters Я вижу, что это так. Раньше я использовал try-except с некоторыми утверждениями внутри них, потому что я не знал, что вы можете хранить контекст, как вы показываете в своем ответе. Я собираюсь пойти и изменить пару модульных тестов в своем собственном коде, чтобы это сделать! – shuttle87

ответ

4

Хранить assertRaises() контекст менеджера, он имеет exception атрибут для вас самоанализа исключения поднятое:

with self.assertRaises(ValidationError) as exception_cm: 
    validate_zipfile(test_zip_path + '.zip') 

exception = exception_cm.exception 
self.assertIn('Zip file not in correct format.', exception.messages) 

Вы можете использовать специфический для Django assertRaisesMessage() method, но учтите, что этот тест выполняет простой тест подстроки (например, вы можете потенциально запустить ложный позитив, где вы проверяете подстроку более длинного сообщения). Поскольку ValidationError обрабатывает список сообщений, тест против ValidationError.messages будет более надежным.

+0

Ty, простой и эффективный. –