2016-11-12 3 views
0

Я пытаюсь утвердить два списка строк, имеющих различное количество элементов. Я тестирую приложение, и моя цель - сбой тестового примера, если в списке «Фактический» содержится хотя бы один элемент, соответствующий ожидаемому списку.Как использовать assertNotEquals для 2 списков разного размера

Я пробовал подходы подходы, но ни один из них не достаточен для моего требования.

List<String> expected = Arrays.asList("fee", "fi", "foe", "foo"); 
List<String> actual = Arrays.asList("feed", "fi"); 
assertThat(actual, not(equalTo(expected)));` 

Я хочу, чтобы это сравнение прошло неудачно, так как есть 1 элемент в фактическом списке, который соответствует ожидаемому.

Assert.assertNotEquals(actual,expected); 
assertThat(actual, is(not(expected))); 
Assert.assertNotEquals(actual, containsInAnyOrder(expected)); 

Ничего из этого не работает. Любая помощь будет оценена по достоинству.

+0

Не могли бы вы объяснить «если в списке« Фактический »содержится хотя бы один элемент, соответствующий ожидаемому списку»?? – Mitchapp

+0

Если вы хотите проверить, есть ли у них другое количество элементов, то вы хотите сравнить actual.size() с expected.size() правильно? – chatton

+0

Возможный дубликат [Что-то вроде «содержит какие-либо» для Java-набора?] (Http://stackoverflow.com/questions/8708542/something-like-contains-any-for-java-set) – Jaims

ответ

1

Это однострочный вкладыш.

Assert.assertTrue(Collections.disjoint(list1, list2)); 

Метод disjoint возвращает true, если два его аргументы не имеют общих элементов.

Это помогает узнать библиотеки, которые поставляются с JDK. См. http://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#disjoint-java.util.Collection-java.util.Collection-

+0

Это решило мою проблему.! – Anuja

0
List<String> commonElement = findCommon(actual,expected);  
public List<String> findCommon(List<String> list1, List<String> list2) { 
     List<String> list = new ArrayList<String>(); 

     for (String t : list1) { 
      if(list2.contains(t)) { 
       list.add(t); 
      } 
     } 

     return list; 
    } 

Assert.assertTrue(commonElement.size() != 0); //This will fail when actual` 

список содержит любой элемент в ожидаемом списке или наоборот.

0

Я думаю, что вы хотите что-то вроде этого:

List<String> expected = Arrays.asList("fee", "fi", "foe", "foo"); 
    List<String> actual = Arrays.asList("feed", "fi"); 

    assert(actual.size() != expected.size()); // Will fail if same number of elements 
    for(String s : actual){ 
     assert(!expected.contains(s)); // Fails if element in actual is in expected 
    } 
0

Вы можете сделать это с помощью assertFalse, если какой-либо из элементов фактического списка совпадает с любым элементом ожидаемого списка, как показано ниже:

@Test 
    public void test() throws Exception{ 
     List<String> expected = Arrays.asList("fee", "fi", "foe", "foo"); 
     List<String> actual = Arrays.asList("feed", "fi1"); 
     for(String temp : expected) { 
      if(!actual.stream().noneMatch((String s) -> s.equals(temp))) { 
       Assert.assertFalse(true); 
      } 
     } 
    } 
+0

Я считаю, что OP хочет проверьте, существует ли ** ** какой-либо ** элемент в 'actual' в' expected'. Это сравнивает два массива с точными совпадениями. – Tim

+0

Я получил вашу мысль, обновил ответ выше – developer

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