2015-09-01 5 views
1

Я использую Java и testng. У меня есть два набора строк: validSet и actualSet. Я хотел бы проверить через assert, что все в actualSet находится в validSet (то есть, что actualSet (- validSet. (Я использую (- обозначать это подмножество). Существует assertContains (desc, collection1, объект). Я пробовал это, но он взял мой actualSet и поместил его в строчную форму, такую ​​как «[item1, item2, item3]» вместо обработки в качестве набора.Утверждение в testng с использованием

Существует assertCollectionEquals() с двумя коллекциями Я считаю, что если я могу удалить все в validSet, который не находится в actualSet, тогда я мог бы проверить, были ли эти два равными. Если они не являются, то я знаю, что actualSet не содержится в validSet.

И я мог бы сделать что-то вроде следующие:

for (String act : actual) { 
    assertTrue(act + " is not valid", validSet.contains(act); 
} 

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

Я пытаюсь думать о методах вызова, чтобы сравнение двух наборов должно быть равным. Как удалить из одного набора все значения, которые НЕ находятся в другом наборе?

Спасибо

ответ

1

Одним из решений может быть, чтобы построить ваше сообщение об ошибке с помощью петли, а затем утверждать после цикла с этим сообщением об ошибке. Что-то вроде:

boolean fail = false ; 
    List<String> actNotInValid = new ArrayList<>(); 
    for(String act: actual) { 
    if(!validSet.contains(act)) { 
     fail = true ; 
     actNotInValid.add(act); 
    } 
    } 

    assertFalse(actNotInValid.toString(), fail); 
+0

Спасибо. Да, я подумал об этом. Просто не был уверен, насколько это красноречиво ;-) Но я думаю, что это яснее, чем то, что я хотел сделать. – Tony

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