Функция Assert для проверки только значения из массивов, содержащихся в списке - PullRequest
0 голосов
/ 05 ноября 2018

Не могли бы вы помочь мне,

У меня есть список и массив:

String[] list = new String[] {"milk", "tea", "milk", "tea", "milk", "tea"};
String[] t = new String[] {"milk", "tea"};

Мне нужно убедиться, что в списке содержатся только значения t (молоко и чай), а не любой другой пример значений, строка не имеет других значений, таких как кофе или печенье.

Я использовал

 for(int i=0; i< t.length; t++)
 {
 Assert.assertTrue(list.contains(t[i]));
 }

Но это проверяется, только если список содержит значения из массива. Мне нужно убедиться, что он содержит «только» их.

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Вы можете сделать это, перебирая списки, а затем используя вложенный цикл for как таковой:

    String[] list = new String[] {"milk", "tea", "milk", "tea", "milk", "tea"};
    String[] t = new String[] {"milk", "tea"};

    boolean result = true;
    for(String item : list) {
        boolean flag = false;
        for(String check : t) {
            if(item.equals(check)) flag = true;
        }
        if(!flag) {
            result = false; 
            break;
        }
    }

    System.out.println(result);

Посредством этого метода переменная result вернет true, если массив содержит только элементы из t. Это делается путем проверки каждого элемента в списке и проверки того, что он равен хотя бы одному элементу из t.

Если хотите, вы можете assert по результату этого true бросить AssertException, когда список содержит другие элементы.

Надеюсь, это помогло!

0 голосов
/ 06 ноября 2018

Самый простой способ сделать это - использовать removeAll(). Из документов

Удаляет из этого списка все его элементы, которые содержатся в указанной коллекции (необязательная операция).

Простой пример

ArrayList<String> list = new ArrayList<String>(Arrays.asList("milk", "tea", "milk", "tea", "milk", "tea"));
ArrayList<String> t = new ArrayList<String>(Arrays.asList("milk", "tea"));
list.removeAll(t);
System.out.println(list);

Это печатает [].

Чтобы показать вам, как выглядит сбой.

ArrayList<String> list2 = new ArrayList<String>(Arrays.asList("extra", "milk", "tea", "milk", "tea", "milk", "tea"));
ArrayList<String> t2 = new ArrayList<String>(Arrays.asList("milk", "tea"));
list2.removeAll(t2);
System.out.println(list2);

Это печатает [extra].

Вы можете сделать простое утверждение, что list.size() равно 0. Если это не 0, вы знаете, что в list есть дополнительные элементы, которых нет в t.

0 голосов
/ 06 ноября 2018

Вы можете сделать что-то вроде этого:

@Test
public void goodListTest() {
    List<String> list = Arrays.asList("milk", "tea", "milk", "tea", "milk", "tea");
    String[] t = new String[] { "milk", "tea" };

    for (String item : list) {
        Assert.assertTrue(arrayContains(t, item));
    }

}

@Test(expected = AssertionError.class)
public void badListTest() {
    List<String> list = Arrays.asList("milk", "randomvalue", "tea", "milk", "tea", "milk", "tea");
    String[] t = new String[] { "milk", "tea" };

    for (String item : list) {
        Assert.assertTrue(arrayContains(t, item));
    }

}

public boolean arrayContains(String[] arr, String value) {
    for (String item : arr) {
        if (item.equals(value)) {
            return true;
        }
    }
    return false;
}

goodListTest - это метод, который имеет правильный список и проверяет его. Это испытание прошло. badListTest - это метод, который имеет неверный список и ожидает выдачи AssertionError.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...