AssertJ - продолжить с плавными утверждениями после проверки класса

Скажем, у меня есть Map<String, Action>, и я делаю так:

    assertThat( spyActionMap.get( "a" ) ).isInstanceOf( Action.class );

... проходит. Теперь я хочу проверить, что полученное Action является правильным:

    assertThat( spyActionMap.get( "a" ) ).isInstanceOf( Action.class ).getValue( Action.NAME ).isEqualTo( "Go crazy" );

... не компилируется, что неудивительно. Есть ли способ сделать это?


person mike rodent    schedule 09.03.2017    source источник
comment
Предоставьте дополнительный контекст, например, класс Action или хотя бы соответствующие его части. Есть ли у него метод getValue? Что такое Action.NAME? Что конкретно вы пытаетесь проверить?   -  person Thomas Traude    schedule 10.03.2017
comment
Вам просто нужно найти Javadoc, чтобы ответить на первый и второй вопросы. Боюсь, ответ на ваш третий вопрос: если вам нужно спросить...   -  person mike rodent    schedule 10.03.2017
comment
Когда я говорю мне искать Javadoc, это намекает мне, что вы можете иметь в виду интерфейс javax.swing.Action, верно? Я вижу, что у него есть статическое поле NAME и даже метод getValue. Было бы полезно, если бы вы предоставили эту информацию в своем вопросе (по крайней мере, с тегом) в первую очередь.   -  person Thomas Traude    schedule 10.03.2017


Ответы (1)


Вы можете попробовать isInstanceOfSatisfying и укажите свои утверждения в Consumer:

Object yoda = new Jedi("Yoda", "Green");
Object luke = new Jedi("Luke Skywalker", "Green");

Consumer<Jedi> jediRequirements = jedi -> {
   assertThat(jedi.getLightSaberColor()).isEqualTo("Green");
   assertThat(jedi.getName()).doesNotContain("Dark");
};

assertThat(yoda).isInstanceOfSatisfying(Jedi.class, jediRequirements);
assertThat(luke).isInstanceOfSatisfying(Jedi.class, jediRequirements);
person Joel Costigliola    schedule 10.03.2017
comment
Спасибо... как один из основных людей, стоящих за AssertJ, вы не думаете, что было бы неплохо, если бы интерфейс Assert, возвращаемый isInstanceOf (и подобными методами), не мог бы каким-то образом поменять его местами с проверенным им экземпляром, приведенным к рассматриваемому классу ? Решение, которое вы даете, иллюстрирует использование еще одного полезного инструмента в наборе инструментов AssertJ... но, возможно, оно не идеально свободно (очевидно, я понятия не имею, насколько сложно было бы разработать мою идею...!) - person mike rodent; 10.03.2017
comment
К сожалению, из-за ограничений Java с дженериками это невозможно, это обсуждалось в github.com/joel-costigliola/assertj-core/issues/683, что привело к решению isInstanceOfSatisfying. - person Joel Costigliola; 10.03.2017