2014-12-14 2 views
0

Предположим, у меня есть огромный список в качестве вывода, который я хочу протестировать. Я создаю список с некоторыми случайными элементами, которые, по моему мнению, должны быть в моем списке результатов. Это то, что я придумал после прочтения документации:unittest: лучшая альтернатива assertIn

def TestMyList(unittest.TestCase): 
    def setUp(self): 
     self.mylist = #get my list from program output file 

    def test_list(self): 
     list_to_test_against = ['some', 'expected', 'elements'] 
     for el in list_to_test_against: 
      self.assertIn(el, self.mylist) 

Есть много проблем с кодом выше:

  1. если 'some' не в self.mylist тогда expected и elements не будут проверены и AssertionError будет поднят, и python перейдет к следующему тесту. Я хочу знать, какой из элементов ['some', 'expected', 'elements'] отсутствует, а не только первый элемент, который не был найден.

  2. Это полностью загрязняет STDOUT с огромным списком, имея в трубу его в журнал, чтобы проверить его

ответ

1

Как об использовании sets (при условии, Oly различные элементы должны быть проверены):

def TestMyList(unittest.TestCase): 
    def setUp(self): 
     # testing for existence we only need a set... 
     self.myset = set(<#get my list from program output file>) 

    def test_list(self): 
     # work with sets to compare 
     set_to_test_against = set(['some', 'expected', 'elements']) 
     # set of tested elements that are found in program output 
     common_set = set_to_test_against & self.myset 
     # report back difference between sets if different (using difference) 
     assert set_to_test_against == common_set, "missing %s" % (set_to_test_against - common_set) 
Смежные вопросы