2015-10-14 1 views
2

Есть ли способ построить комбинированный совпадение Hamcrest, который проверяет объект и свойство этого объекта? - псевдо-код:Как применить совпадение Hamcrest к свойству испытуемого класса?

both(
    instanceof(MultipleFailureException.class) 
).and(
    // pseudo code starts 
    adapt(
    new Adapter<MultipleFailureException, Iterable<Throwable>() 
    { 
     public Iterable<Throwable> getAdapter(MultipleFailureException item) 
     { 
     return item.getFailures(); 
     } 
    }, 
    // pseudo code ends 
    everyItem(instanceOf(IllegalArgumentException.class)) 
) 
) 

Справочная информация: У меня есть тест JUnit, который перебирает коллекцию динамических объектов. Ожидается, что каждый объект генерирует исключение при обработке. Исключения собираются. Испытание, как ожидается, до конца с MultipleFailureException, содержащей коллекцию этих выброшенных исключений:

protected final ExpectedException expectation = ExpectedException.none(); 
protected final ErrorCollector collector = new ErrorCollector(); 

@Rule 
public RuleChain exceptionRules = RuleChain.outerRule(expectation).around(collector); 

@Test 
public void testIllegalEnumConstant() 
{ 
    expectation.expect(/* pseudo code from above */); 
    for (Object object : ILLEGAL_OBJECTS) 
    { 
    try 
    { 
     object.processWithThrow(); 
    } 
    catch (Throwable T) 
    { 
     collector.addError(T); 
    } 
    } 
} 

ответ

2

Я думаю, что вы могли бы искать hasProperty или hasPropertyWithValue

Смотрите здесь для примера: https://theholyjava.wordpress.com/2011/10/15/hasproperty-the-hidden-gem-of-hamcrest-and-assertthat/

других что-то, с чем я работал ранее; здесь мы проверяем, есть ли у нас метод Quote возвращает коллекцию PhoneModel, и один из предметов в коллекции имеет свойство makeId, которое равно LG_ID и modelId, что равно NEXUS_4_ID.

  assertThat(quote.getModels(), 
          hasItem(Matchers.<PhoneModel> hasProperty("makeId", 
              equalTo(LG_ID)))); 
      assertThat(quote.getModels(), 
          hasItem(Matchers.<PhoneModel> hasProperty("modelId", 
              equalTo(NEXUS_4_ID)))); 
    } 

Для этой работы, Hamcrest зависит от вас принятия JavaBean convensions.

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

  • Нет связанных вопросов^_^