pyhamcrest - Сравнить два списка

Я только начал изучать питон. В настоящее время пишется модульный тест, чтобы проверить, присутствуют ли элементы в ожидаемом списке в фактическом списке.

def test_compare_list_of_items():
    actual_list_of_items = ['a','b']
    expected_list_of_items = ['a']

    assert_that(actual_list_of_items, has_item(has_items(expected_list_of_items)))  

но я получаю такие ошибки, как

E    Expected: a sequence containing (a sequence containing <['a']>)
E         but: was <['a', 'b']>

Как и какой сопоставитель последовательностей я должен использовать, чтобы утверждать, присутствует ли элемент 'a' в ожидаемом списке в фактическом списке?

2 ответа

Ты используешь has_item когда вы должны использовать только has_items. Согласно документам, для этого требуется несколько сопоставителей, которые вам нужны. Тогда ваша функция станет

def test_compare_list_of_items():
    actual_list_of_items = ['a','b']
    expected_list_of_items = ['a']

    assert_that(actual_list_of_items, has_items(*expected_list_of_items))

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

Я не знаю о has_items функция, но можно ли просто использовать что-то подобное?

assertTrue(all(item in expected_list_of_items for item in actual_list_of_items))
Другие вопросы по тегам