Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component...
Transcript of Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component...
![Page 1: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/1.jpg)
Тестируем и плачемВместе со Spring Boot Test
![Page 2: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/2.jpg)
@tolkv
@lavcraft
![Page 3: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/3.jpg)
@jekaborisov
@jeka1978
![Page 4: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/4.jpg)
В программеТестирование живого приложения● Старые подходы
○ @ContextConfiguration○ @ContextHierarchy && @DirtiesContext○ @ActiveProfiles
● Что нового нам приготовил Spring Boot?○ @SpringBootTest○ @TestConfiguration○ @MockBean && @SpyBean && @*Beans○ @DataJpaTest○ @MvcTest
● Кэширование spring контекстов● Шкала тестов
![Page 5: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/5.jpg)
Немного теории
![Page 6: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/6.jpg)
Шкала Тестов
UnitComponent Test
Microservice TestSystem Test
➯ ➯➯ ➯
![Page 7: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/7.jpg)
Шкала Тестов
UnitComponent Test
Microservice TestSystem Test
➯ ➯➯ ➯
![Page 8: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/8.jpg)
Unit/Component тесты. Для чего?
![Page 9: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/9.jpg)
Unit/Component тесты. Для чего?
![Page 10: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/10.jpg)
Unit/Component тесты. Для чего?
Ваши тестыТут
![Page 11: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/11.jpg)
Unit/Component тесты. Для чего?
Тестыуменьшают неопределённость
![Page 12: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/12.jpg)
Есть два типа тестов
Простой Сложный
![Page 13: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/13.jpg)
Есть два типа тестовКакой сам выберешь
Простой Сложный
![Page 14: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/14.jpg)
Есть два типа тестовКакой сам выберешь, а какой разработчику оставишь?
Простой Сложный
![Page 15: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/15.jpg)
Когда пишут тесты?
![Page 16: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/16.jpg)
Когда пишут тесты?
1. Требование заказчика
![Page 17: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/17.jpg)
Когда пишут тесты?
1. Требование заказчика2. Культура
![Page 18: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/18.jpg)
Когда пишут тесты?
1. Требование заказчика2. Культура Перед кодом
![Page 19: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/19.jpg)
Когда пишут тесты?
1. Требование заказчика2. Культура Перед кодом
Вместе кодом
![Page 20: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/20.jpg)
Когда пишут тесты?
1. Требование заказчика2. Культура Перед кодом
Вместе кодом
После кода
![Page 21: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/21.jpg)
UnitComponent Test
Про какие тесты будем говорить?
➯ ➯Перед кодом
Вместе кодом
После кода
![Page 22: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/22.jpg)
UnitComponent Test
➯ ➯
Про какие тесты будем говорить?
Перед кодом
Вместе кодом
После кода
![Page 23: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/23.jpg)
Начнём
![Page 24: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/24.jpg)
router
joker
jbaruch-assistant
Default AnswersDatabase
Joker Resolver$tokens.joker
JBaruch Resolver
...
$tokens.jbaruch
Дано
![Page 25: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/25.jpg)
ДаноЧат поддержки тестировщиков
assistant
joker-assistant
jbaruch-assistant
Queue
мыweb
rest
rest
rest
Default AnswersDatabase
![Page 26: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/26.jpg)
Эксперты
![Page 27: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/27.jpg)
Эксперты
![Page 28: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/28.jpg)
Demo
![Page 29: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/29.jpg)
ДаноЧат поддержки тестировщиков
assistant
joker-assistant
jbaruch-assistant
Queue
мыweb
rest
rest
rest
Default AnswersDatabase
![Page 30: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/30.jpg)
![Page 31: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/31.jpg)
![Page 32: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/32.jpg)
![Page 33: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/33.jpg)
А давайте тестировать
![Page 34: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/34.jpg)
А давайте тестировать
У кого спросить? [joker/jbaruch]
router
joker
jbaruch-assistant
Default AnswersDatabase
Joker Resolver$tokens.joker
JBaruch Resolver
...
$tokens.jbaruch
![Page 35: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/35.jpg)
DemoJokerWordsFrequencyResolverTest
![Page 36: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/36.jpg)
А давайте тестировать. Тест #11. Пишем JokerWordsFrequencyResolverTest.
![Page 37: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/37.jpg)
Demo
![Page 38: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/38.jpg)
Кого тестируем@Componentpublic class JokerWordsFrequencyResolver extends AbstractWordsFreqResolver {
@Value("${tokens.joker}") private String answers;
public JokerWordsFrequencyResolver(WordsComposer wordsComposer) { super(wordsComposer); }
@Override public QuestionType getQuestionType() { return JOKER; }}
![Page 39: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/39.jpg)
Тест №1.5
public class JokerWordsFrequencyResolverTest { @Test public void name() throws Exception { JokerWordsFrequencyResolver jokerWordsFrequencyResolver = new JokerWordsFrequencyResolver(
... ) ); jokerWordsFrequencyResolver.setAnswers( "objects");
int match = jokerWordsFrequencyResolver.match( Question.builder().body("objects ...").build());
assertThat(match, equalTo(1)); }}
![Page 40: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/40.jpg)
Тест №1.5
public class JokerWordsFrequencyResolverTest { @Test public void name() throws Exception { JokerWordsFrequencyResolver jokerWordsFrequencyResolver = new JokerWordsFrequencyResolver( new WordsComposer( ... ) ); jokerWordsFrequencyResolver.setAnswers( "objects");
int match = jokerWordsFrequencyResolver.match( Question.builder().body("objects ...").build());
assertThat(match, equalTo(1)); }}
![Page 41: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/41.jpg)
Тест №1.5
public class JokerWordsFrequencyResolverTest { @Test public void name() throws Exception { JokerWordsFrequencyResolver jokerWordsFrequencyResolver = new JokerWordsFrequencyResolver( new WordsComposer( new GarbageProperties() ) ); jokerWordsFrequencyResolver.setAnswers( "objects");
int match = jokerWordsFrequencyResolver.match( Question.builder().body("objects ...").build());
assertThat(match, equalTo(1)); }}
![Page 42: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/42.jpg)
Тест №1
public class JokerWordsFrequencyResolverTest { @Test public void name() throws Exception { JokerWordsFrequencyResolver jokerWordsFrequencyResolver = new JokerWordsFrequencyResolver( new WordsComposer( new GarbageProperties() ) ); jokerWordsFrequencyResolver.setAnswers( "objects");
int match = jokerWordsFrequencyResolver.match( Question.builder().body("objects ...").build());
assertThat(match, equalTo(1)); }}
![Page 43: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/43.jpg)
Тест №1
public class JokerWordsFrequencyResolverTest { @Test public void name() throws Exception { JokerWordsFrequencyResolver jokerWordsFrequencyResolver = new JokerWordsFrequencyResolver( new WordsComposer( new GarbageProperties() ) ); jokerWordsFrequencyResolver.setAnswers( "objects");
int match = jokerWordsFrequencyResolver.match( Question.builder().body("objects ...").build());
assertThat(match, equalTo(1)); }}
![Page 44: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/44.jpg)
Результат
java.lang.NullPointerExceptionat … .(WordsComposer.java:48)
![Page 45: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/45.jpg)
Not Passed
![Page 46: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/46.jpg)
WordsComposer:48
garbageProperties.getGarbage()
.contains(s.toLowerCase())
NullPointerException
![Page 47: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/47.jpg)
WordsComposer:48
@Value("${garbage}")void setGarbage(String[] garbage) {
Запчасти Spring
![Page 48: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/48.jpg)
А давайте тестировать. Тест #11. Пишем JokerWordsFrequencyResolverTest.2. Как ни крути, но нужен более “интеграционный тест”
![Page 49: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/49.jpg)
Шкала Тестов
Unit
➯
![Page 50: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/50.jpg)
Шкала Тестов
UnitComponent Test
➯ ➯
![Page 51: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/51.jpg)
UnitComponent Test
➯ ➯
Про какие тесты будем говорить?
Перед кодом
Вместе кодом
После кода
![Page 52: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/52.jpg)
UnitComponent Test
➯ ➯
Про какие тесты будем говорить?
Перед кодом
Вместе кодом
После кода
![Page 53: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/53.jpg)
UnitComponent Test
➯ ➯
Про какие тесты будем говорить?
Перед кодом
Вместе кодом
После кода@Value("${garbage}")void setGarbage(String[] garbage) {
Инициализируется Spring`ом
![Page 54: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/54.jpg)
Ещё немного теории
![Page 55: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/55.jpg)
IoC, DI, Spring и друзья
![Page 56: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/56.jpg)
IoC, DI, Spring и друзья
![Page 57: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/57.jpg)
IoC, DI, Spring и друзья
![Page 58: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/58.jpg)
IoC, DI, Spring и друзья
Кино про супергероев
![Page 59: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/59.jpg)
IoC, DI, Spring и друзья
Кино про супергероев
![Page 60: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/60.jpg)
IoC, DI, Spring и друзья
Кино про супергероев
![Page 61: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/61.jpg)
IoC, DI, Spring и друзья
Кино про супергероев
IoC
![Page 62: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/62.jpg)
ФабрикаГероев
IoC, DI, Spring и друзья
Кино про супергероев
IoC
![Page 63: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/63.jpg)
IoC, DI, Spring и друзья
IoC для инверсии поведения
![Page 64: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/64.jpg)
IoC, DI, Spring и друзья
public class СуперЗлодейТест {
@Before public void setUp() throws Exception {
... }
}
Тоже инверсия контроля
IoC для инверсии поведения
![Page 65: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/65.jpg)
IoC, DI, Spring и друзья
public class СъемочнаяПлощадка { public static void main(String[] args) { Киношка съёмка = new Киношка().снимать();
съёмка.герой.бить(); съёмка.злодей.страдать(); съёмка.злодей.бить(); съёмка.герой.страдать(); съёмка.герой.страдать(); }}
![Page 66: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/66.jpg)
IoC, DI, Spring и друзья
public class СъемочнаяПлощадка { public static void main(String[] args) { Киношка съёмка = new Киношка().снимать();
съёмка.герой.бить(); съёмка.злодей.страдать(); съёмка.злодей.бить(); съёмка.герой.страдать(); съёмка.герой.страдать(); }}
NullPointerException
![Page 67: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/67.jpg)
IoC, DI, Spring и друзья
public class Киношка { СуперГерой герой; СуперЗлодей злодей;
public Киношка снимать() { return new Киношка(); }}
![Page 68: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/68.jpg)
IoC, DI, Spring и друзьяpublic class СуперГерой implements Герой { private СуперЗлодей вражина;
@Override public void бить() { вражина.бить(); }}
public class СуперЗлодей implements Герой { private СуперГерой вражина;
@Override public void бить() { вражина.страдать(); }}
Кто проставляет?
![Page 69: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/69.jpg)
public class ФабрикаГероев { public Object родить() { if (new Random().nextBoolean()) { return new СуперГерой(); } return new СуперЗлодей(); }}
IoC, DI, Spring и друзья
![Page 70: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/70.jpg)
public class ФабрикаГероев { public Object родить() { if (new Random().nextBoolean()) { return new СуперГерой(); } return new СуперЗлодей(); }}
IoC, DI, Spring и друзья
![Page 71: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/71.jpg)
IoC, DI, Spring и друзья
Spring
![Page 72: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/72.jpg)
IoC, DI, Spring и друзья
Spring
● @Autowired● @Component/@Service● @Configuration
![Page 73: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/73.jpg)
IoC, DI, Spring и друзья
@Componentpublic class Киношка { @Autowired СуперГерой герой; @Autowired СуперЗлодей злодей;
public static Киношка снимать() { return new Киношка(); }}
Spring
● @Autowired● @Component/@Service● @Configuration
![Page 74: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/74.jpg)
IoC, DI, Spring и друзья
@Componentpublic class Киношка { @Autowired СуперГерой герой; @Autowired СуперЗлодей злодей;
public static Киношка снимать() { return new Киношка(); }}
Spring
● @Autowired● @Component/@Service● @Configuration
![Page 75: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/75.jpg)
IoC, DI, Spring и друзья
@Componentpublic class СуперГерой implements Герой { @Autowired СуперЗлодей вражина;
@Override public void бить() { вражина.бить(); }}
Spring
● @Autowired● @Component/@Service● @Configuration
![Page 76: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/76.jpg)
Demo
![Page 77: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/77.jpg)
Тест №1.5@RunWith(SpringRunner.class)@ContextConfiguration (classes = JokerWordsFrequencyResolverTestConfig. class)public class JokerWordsFrequencyResolverTest {
@Autowired JokerWordsFrequencyResolver jokerWordsFrequencyResolver;
@Test public void name() throws Exception { jokerWordsFrequencyResolver.setAnswers("objects");
int match = jokerWordsFrequencyResolver.match( Question.builder().body("objects ...").build());
assertThat(match, equalTo(1)); }}
![Page 78: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/78.jpg)
Тест №1.5
@Configurationpublic class JokerWordsFrequencyResolverTestConfig {
@Bean public JokerWordsFrequencyResolver jokerWordsFrequencyResolver( WordsComposer wordsComposer) { return new JokerWordsFrequencyResolver(wordsComposer); }
}
![Page 79: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/79.jpg)
Тест №1.5
@Configurationpublic class JokerWordsFrequencyResolverTestConfig {
@Bean public JokerWordsFrequencyResolver jokerWordsFrequencyResolver( WordsComposer wordsComposer) { return new JokerWordsFrequencyResolver(wordsComposer); }
}
![Page 80: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/80.jpg)
Тест №1.5@Configuration@ComponentScan("com.conference.spring.test.common")public class JokerWordsFrequencyResolverTestConfig {
@Bean public JokerWordsFrequencyResolver jokerWordsFrequencyResolver( WordsComposer wordsComposer) { return new JokerWordsFrequencyResolver(wordsComposer); }
}
![Page 81: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/81.jpg)
Тест №1.5@Configuration@ComponentScan("com.conference.spring.test.common")public class JokerWordsFrequencyResolverTestConfig {
@Bean public JokerWordsFrequencyResolver jokerWordsFrequencyResolver( WordsComposer wordsComposer) { return new JokerWordsFrequencyResolver(wordsComposer); }
}
![Page 82: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/82.jpg)
Тест №1.5@RunWith(SpringRunner.class)@ContextConfiguration (classes = JokerWordsFrequencyResolverTestConfig. class)public class JokerWordsFrequencyResolverTest {
@Autowired JokerWordsFrequencyResolver jokerWordsFrequencyResolver;
@Test public void name() throws Exception { jokerWordsFrequencyResolver.setAnswers("objects");
int match = jokerWordsFrequencyResolver.match( Question.builder().body("objects ...").build());
assertThat(match, equalTo(1)); }}
![Page 83: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/83.jpg)
Passed
![Page 84: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/84.jpg)
Ещё немного теории
![Page 85: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/85.jpg)
SpringRunner
/** * @author Sam Brannen * @since 4.3 * @see SpringJUnit4ClassRunner */public final class SpringRunner extends SpringJUnit4ClassRunner
![Page 86: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/86.jpg)
SpringRunner & SpringJUnit4ClassRunner
/** * @author Sam Brannen * @author Juergen Hoeller * ... */public class SpringJUnit4ClassRunner extends BlockJUnit4ClassRunner
![Page 87: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/87.jpg)
/** * {@code SpringExtension} integrates the <em>Spring TestContext … </em> * into JUnit 5's <em>Jupiter</em> programming model. ... * @author Sam Brannen * @since 5.0 */public class SpringExtension implements BeforeAllCallback, … {
SpringExtension — Junit5
![Page 88: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/88.jpg)
SpringExtension — Junit5
@SpringJUnitConfig@SpringJUnitWebConfig
![Page 89: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/89.jpg)
1. Пишем TextBasedQuestionTypeResolverTest
А давайте тестировать. Тест #2
![Page 90: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/90.jpg)
Шкала Тестов
UnitComponent Test
➯ ➯
![Page 91: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/91.jpg)
1. Пишем TextBasedQuestionTypeResolverTest2. Вручную создаем три бина для тестирования
TextBasedQuestionTypeResolver на примере Барух vs Джокер кейса
А давайте тестировать. Тест #2
![Page 92: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/92.jpg)
DemoTextBasedQuestionTypeResolverTest
![Page 93: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/93.jpg)
@RunWith(SpringRunner.class)@ContextConfiguration (classes = TextBasedQuestionTypeResolverTestConfig. class)public class TextBasedQuestionTypeResolverTest { @Autowired TextBasedQuestionTypeResolver questionResolver;
@Test public void name() throws Exception { QuestionType groovy = questionResolver.resolveType(new Question("groovy")); QuestionType objects = questionResolver.resolveType(new Question("псих"));
assertThat(groovy, equalTo(JBARUCH)); assertThat(objects, equalTo(JOKER)); }}
Тест #2
![Page 94: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/94.jpg)
@Configurationpublic class TextBasedQuestionTypeResolverTestConfig {
@Bean public TextBasedQuestionTypeResolver textBasedQuestionTypeResolver( List<WordsFrequencyResolver> c) { return new TextBasedQuestionTypeResolver(c); }
}
Тест #2
![Page 95: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/95.jpg)
@Configurationpublic class TextBasedQuestionTypeResolverTestConfig {
@Bean public TextBasedQuestionTypeResolver textBasedQuestionTypeResolver( List<WordsFrequencyResolver> c) { return new TextBasedQuestionTypeResolver(c); }
@Bean public JokerWordsFrequencyResolver … { … }
@Bean public JBaruchWordsFrequencyResolver … { … }
}
Тест #2
![Page 96: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/96.jpg)
@Configurationpublic class TextBasedQuestionTypeResolverTestConfig {
@Bean public TextBasedQuestionTypeResolver textBasedQuestionTypeResolver( List<WordsFrequencyResolver> c) { return new TextBasedQuestionTypeResolver(c); }
@Bean public JokerWordsFrequencyResolver … { … }
@Bean public JBaruchWordsFrequencyResolver … { … }
}
Тест #2
Для них нужен WordsComposer@ComponentScan("com.conference.spring.test.common") ?
![Page 97: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/97.jpg)
@Configurationpublic class TextBasedQuestionTypeResolverTestConfig {
@Bean public TextBasedQuestionTypeResolver textBasedQuestionTypeResolver( List<WordsFrequencyResolver> c) { return new TextBasedQuestionTypeResolver(c); }
@Bean public JokerWordsFrequencyResolver … { … }
@Bean public JBaruchWordsFrequencyResolver … { … }
}
Тест #2
Для них нужен WordsComposer@ComponentScan("com.conference.spring.test.common") ?
![Page 98: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/98.jpg)
@Configuration@Import(CommonConfig.class)public class TextBasedQuestionTypeResolverTestConfig {
@Bean public TextBasedQuestionTypeResolver textBasedQuestionTypeResolver( List<WordsFrequencyResolver> c) { return new TextBasedQuestionTypeResolver(c); }
@Bean public JokerWordsFrequencyResolver … { … }
@Bean public JBaruchWordsFrequencyResolver … { … }
}
Тест #2
![Page 99: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/99.jpg)
@Configuration@ComponentScan("com.conference.spring.test.common")public class CommonConfig {
}
Тест #2
![Page 100: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/100.jpg)
Not Passed
![Page 101: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/101.jpg)
class JokerWordsFrequencyResolver@Value("${tokens.joker}")private String answers;
class JBaruchWordsFrequencyResolver@Value("${tokens.jbaruch}")private String answers;
Кто считывает?
Что случилось
![Page 102: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/102.jpg)
Что случилосьclass JokerWordsFrequencyResolver
@Value("${tokens.joker}")private String answers;
class JBaruchWordsFrequencyResolver@Value("${tokens.jbaruch}")private String answers;
application.yml:tokens: jbaruch: npm leftpad artifactory groovy object *** joker: objects
Кто считывает?
Отсюда считываем
![Page 103: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/103.jpg)
@Configuration@Import(CommonConfig.class)@PropertySource("classpath*:application.yml")public class TextBasedQuestionTypeResolverTestConfig {
@Bean public TextBasedQuestionTypeResolver textBasedQuestionTypeResolver( List<WordsFrequencyResolver> c) { return new TextBasedQuestionTypeResolver(c); }
@Bean public JokerWordsFrequencyResolver … { … }
@Bean public JBaruchWordsFrequencyResolver … { … }
}
Тест #2
![Page 104: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/104.jpg)
@Configuration@Import(CommonConfig.class)@PropertySource("classpath*:application.yml")public class TextBasedQuestionTypeResolverTestConfig {
@Bean public TextBasedQuestionTypeResolver textBasedQuestionTypeResolver( List<WordsFrequencyResolver> c) { return new TextBasedQuestionTypeResolver(c); }
@Bean public JokerWordsFrequencyResolver … { … }
@Bean public JBaruchWordsFrequencyResolver … { … }
}
Тест #2
![Page 105: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/105.jpg)
Not Passed
![Page 106: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/106.jpg)
1. Пишем TextBasedQuestionTypeResolverTest2. Вручную создаем три бина для тестирования
TextBasedQuestionTypeResolver на примере Барух vs Егор кейса3. Все падает потому что не подтягивается application.yml4. @PropertySource …
А давайте тестировать. Тест #2
![Page 107: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/107.jpg)
@ContextConfiguration(classes = ....class, initializers = YamlFileApplicationContextInitializer.class)public class OurTest { @Test public test(){... }}
А давайте тестировать. Тест #2
![Page 108: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/108.jpg)
Spring Boot обновки
1. @SpringBootTest2. @TestConfiguration3. @MockBean && @SpyBean4. @DataJpaTest5. @MockMvcTest
![Page 109: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/109.jpg)
Углубляемся в Spring. Тест #21. Применяем @SpringBootTest
![Page 110: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/110.jpg)
Demo
![Page 111: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/111.jpg)
@RunWith(SpringRunner.class)@ContextConfiguration (classes = TextBasedQuestionTypeResolverTestConfig. class)public class TextBasedQuestionTypeResolverTest { @Autowired TextBasedQuestionTypeResolver questionResolver;
@Test public void name() throws Exception { QuestionType groovy = questionResolver.resolveType(new Question("groovy")); QuestionType objects = questionResolver.resolveType(new Question("objects"));
assertThat(groovy, equalTo(JBARUCH)); assertThat(objects, equalTo(JOKER)); }}
Тест #2
![Page 112: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/112.jpg)
@RunWith(SpringRunner.class)@SpringBootTestpublic class TextBasedQuestionTypeResolverTest { @Autowired TextBasedQuestionTypeResolver questionResolver;
@Test public void name() throws Exception { QuestionType groovy = questionResolver.resolveType(new Question("groovy")); QuestionType objects = questionResolver.resolveType(new Question("objects"));
assertThat(groovy, equalTo(JBARUCH)); assertThat(objects, equalTo(JOKER)); }}
Тест #2
![Page 113: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/113.jpg)
Not Passed
![Page 114: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/114.jpg)
@RunWith(SpringRunner.class)@SpringBootTest@ActiveProfiles("joker_vs_jbaruch")public class TextBasedQuestionTypeResolverTest { @Autowired TextBasedQuestionTypeResolver questionResolver;
@Test public void name() throws Exception { QuestionType groovy = questionResolver.resolveType(new Question("groovy")); QuestionType objects = questionResolver.resolveType(new Question("objects"));
assertThat(groovy, equalTo(JBARUCH)); assertThat(objects, equalTo(JOKER)); }}
Тест #2
Для подгрузкиapplication-joker_vs_jbaruch.yml
![Page 115: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/115.jpg)
Passed
![Page 116: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/116.jpg)
Углубляемся в Spring. Тест #21. Применяем @SpringBootTest2. Долго…3. @SpringBootTest(classes = ...class)
![Page 117: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/117.jpg)
Углубляемся в Spring. Тест #21. Применяем @SpringBootTest2. Долго…3. @SpringBootTest(classes = ...class)4. Стало быстрее
![Page 118: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/118.jpg)
Demo - но можно лучше
![Page 119: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/119.jpg)
@Configuration@ComponentScan("com.conference.spring.test.common")public class CommonConfig {
@PostConstruct public void init() { System.out.println("Only once " + CommonConfig.class); }
}
Тест #2
![Page 120: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/120.jpg)
Запустим тест №1 и №2 за раз
![Page 121: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/121.jpg)
Only once…
only once…
only once
![Page 122: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/122.jpg)
Only once…
only once…
only once
Дважды...
![Page 123: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/123.jpg)
Углубляемся в Spring. Тест #21. Применяем @SpringBootTest2. Долго…3. @SpringBootTest(classes = ...class)4. Стало быстрее5. С кэшированием конфигураций – еще быстрее
![Page 124: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/124.jpg)
Углубляемся в Spring. Тест #2@ContextHierarchy({ @ContextConfiguration(classes=WordsCommonConfiguration.class), @ContextConfiguration(classes= ...class)})
![Page 125: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/125.jpg)
Demo
![Page 126: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/126.jpg)
@SpringBootTest@ContextHierarchy({ @ContextConfiguration(classes = TextBasedQuestionTypeResolverTestConfig.class), @ContextConfiguration(classes = CommonConfig.class)})@ActiveProfiles("joker_vs_jbaruch")@RunWith(SpringRunner.class)public class TextBasedQuestionTypeResolverTest {...
![Page 127: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/127.jpg)
Запустим тест №1 и №2 за раз
![Page 128: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/128.jpg)
Only once…
only once…
only once…
only once…
only once
Четыре раза...
![Page 129: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/129.jpg)
![Page 130: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/130.jpg)
@Configuration@Import(CommonConfig.class)public class JokerWordsFrequencyResolverTestConfig {
@Configuration@Import(CommonConfig.class)public class TextBasedQuestionTypeResolverTestConfig {
![Page 131: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/131.jpg)
Убираем @Import(CommonConfig.class)
![Page 132: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/132.jpg)
Not Passed
![Page 133: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/133.jpg)
![Page 134: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/134.jpg)
Не найден spring bean WordsComposer
![Page 135: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/135.jpg)
Углубляемся в Spring. Тест #2@ContextHierarchy({ @ContextConfiguration(classes=WordsCommonConfiguration.class), @ContextConfiguration(classes= ...class)})
Порядок важен! Т.к другая конфигурация использует бины из WordsCommonConfiguration
![Page 136: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/136.jpg)
Меняем порядок в @ContextHierarchy
@SpringBootTest@ContextHierarchy({ @ContextConfiguration(classes = CommonConfig.class), @ContextConfiguration(classes = TextBasedQuestionTypeResolverTestConfig.class) })@ActiveProfiles("joker_vs_jbaruch")@RunWith(SpringRunner.class)public class TextBasedQuestionTypeResolverTest {...
CommonConfig теперь первый
![Page 137: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/137.jpg)
Passed
![Page 138: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/138.jpg)
Only once…
only once…
only once
Дважды...
![Page 139: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/139.jpg)
Сделали круг
![Page 140: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/140.jpg)
Опять не закешировалось. Тест #2
![Page 141: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/141.jpg)
Правила кэширования контекстов. Тест #2
@SpringBootTest – должен быть везде@Import – должен быть нигде@ActiveProfiles – один на всехSpringBootTest.properties – должны быть одинаковые
![Page 142: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/142.jpg)
Правила кэширования контекстов. Тест #2
@SpringBootTest – должен быть везде@Import – должен быть нигде@ActiveProfiles – один на всехSpringBootTest.properties – должны быть одинаковые
![Page 143: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/143.jpg)
Правила кэширования контекстов. Тест #2
@SpringBootTest – должен быть везде@Import – должен быть нигде@ActiveProfiles – один на всехSpringBootTest.properties – должны быть одинаковые
Порядок важен!Любая перестановка – cache miss
![Page 144: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/144.jpg)
Правила кэширования контекстов. Тест #2
@SpringBootTest(properties={"a=b","b=a"})@SpringBootTest(properties={"b=a","a=b"})
![Page 145: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/145.jpg)
Правила кэширования контекстов. Тест #2
@SpringBootTest(properties={"a=b","b=a"})@SpringBootTest(properties={"b=a","a=b"})
Кэш не сработает
![Page 146: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/146.jpg)
Правила кэширования контекстов. Тест #2
@SpringBootTest – должен быть везде@Import – должен быть нигде@ActiveProfiles – один на всехSpringBootTest.properties – должны быть одинаковые
![Page 147: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/147.jpg)
Хрупкий кэш
Все может привести к потере кэша
![Page 148: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/148.jpg)
Пользуемся силойlogging.level.org.springframework.test.context.cache=debug
![Page 149: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/149.jpg)
Б – безопасность@SpringBootTest@ActiveProfiles("joker_vs_jbaruch")public abstract class ResolversAbstractCommonConfiguration {
}
![Page 150: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/150.jpg)
Only once…
only once
Один!...
![Page 151: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/151.jpg)
А если наоборот? (как не кэшировать)
![Page 152: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/152.jpg)
А если наоборот? (как не кэшировать)@DirtiesContext(...)
![Page 153: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/153.jpg)
А если наоборот? (как не кэшировать)@DirtiesContext(...)
methodMode() default MethodMode.AFTER_METHODclassMode() default ClassMode.AFTER_CLASS...
![Page 154: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/154.jpg)
Проверим наши знания. Тест #31. протестируем AnswerCacheServiceJPABackend
![Page 155: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/155.jpg)
DemoAnswerCacheServiceJPABackend
![Page 156: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/156.jpg)
Что тестируем@Service@RequiredArgsConstructorpublic class AnswerCacheServiceJPABackend implements AnswerCacheService { private final QuestionRepository questionRepository; private final AnswersRepository answersRepository;
@Override public Answer find(Question question) { … }
…
}
![Page 157: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/157.jpg)
Что тестируем@Service@RequiredArgsConstructorpublic class AnswerCacheServiceJPABackend implements AnswerCacheService { private final QuestionRepository questionRepository; private final AnswersRepository answersRepository;
@Override public Answer find(Question question) { … }
…
}
![Page 158: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/158.jpg)
Что тестируем@Service@RequiredArgsConstructorpublic class AnswerCacheServiceJPABackend implements AnswerCacheService { private final QuestionRepository questionRepository; private final AnswersRepository answersRepository;
@Override public Answer find(Question question) { … }
…
}
![Page 159: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/159.jpg)
Spring Boot обновки
1. @SpringBootTest2. @MockBean && @SpyBean3. @TestConfiguration4. @DataJpaTest5. @MockMvcTest
![Page 160: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/160.jpg)
Как тестируем@RunWith(SpringRunner.class)@SpringBootTest(classes = AnswerCacheServiceJPABackendTestConfig.class)public class AnswerCacheServiceJPABackendTest { @Autowired AnswerCacheService answerCacheService;
@MockBean AnswersRepository answersRepository; @MockBean QuestionRepository questionRepository;
@Test public void should_not_fail() throws Exception { … test … }}
![Page 161: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/161.jpg)
Как тестируем@RunWith(SpringRunner.class)@SpringBootTest(classes = AnswerCacheServiceJPABackendTestConfig.class)public class AnswerCacheServiceJPABackendTest { @Autowired AnswerCacheService answerCacheService;
@MockBean AnswersRepository answersRepository; @MockBean QuestionRepository questionRepository;
@Test public void should_not_fail() throws Exception { … test … }}
![Page 162: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/162.jpg)
Как тестируем@RunWith(SpringRunner.class)@SpringBootTest(classes = AnswerCacheServiceJPABackendTestConfig.class)public class AnswerCacheServiceJPABackendTest { @Autowired AnswerCacheService answerCacheService;
@MockBean AnswersRepository answersRepository; @MockBean QuestionRepository questionRepository;
@Test public void should_not_fail() throws Exception { … test … }}
![Page 163: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/163.jpg)
Как тестируем – Конфигурация@Configurationpublic class AnswerCacheServiceJPABackendTestConfig { @Bean public AnswerCacheServiceJPABackend answerCacheServiceJpaBackend(
QuestionRepository qR, AnswersRepository aR) {
return new AnswerCacheServiceJPABackend(qR, aR); }
}
![Page 164: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/164.jpg)
Как тестируем – сам тест
@Test public void should_not_fail() throws Exception { Mockito.doThrow(new RuntimeException("Database is down")) .when(questionRepository) .findFirstByText(Matchers.anyString());
Answer answer = answerCacheService.find(Question.builder().build());
assertNull(answer);
}}
Наш @MockBean
![Page 165: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/165.jpg)
Passed
![Page 166: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/166.jpg)
Синергия с Mockito1. @MockBean/@SpyBean2. @PostConstruct для настройки3. @Bean для настройки конкретных моков
![Page 167: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/167.jpg)
1. Запустим все тесты
Все ли хорошо?
![Page 168: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/168.jpg)
Not Passed
![Page 169: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/169.jpg)
1. Запустим все тесты2. DeveloperAssistantApplicationTests.contextLoad падает
Все ли хорошо?
Стандартный тест на запуск контекст см start.spring.io
![Page 170: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/170.jpg)
Почему упалДва бина одного типа в контексте
● answerCacheServiceJPABackend● answerCacheServiceJpaBackend
![Page 171: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/171.jpg)
Почему упалДва бина одного типа в контексте
● answerCacheServiceJPABackend● answerCacheServiceJpaBackend
![Page 172: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/172.jpg)
Как Spring называет бины?почему имена бинов разные
![Page 173: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/173.jpg)
1. Запустим все тесты2. DeveloperAssistantApplicationTests.contextLoad падает3. Загрузил бины из другого теста!
Все ли хорошо?
![Page 174: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/174.jpg)
![Page 175: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/175.jpg)
Spring Boot обновки
1. @SpringBootTest2. @MockBean && @SpyBean3. @TestConfiguration4. @DataJpaTest5. @MockMvcTest
![Page 176: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/176.jpg)
1. Запустим все тесты2. DeveloperAssistantApplicationTests.contextLoad падает3. Загрузил бины из другого теста!4. @TestConfiguration!
Все ли хорошо?
![Page 177: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/177.jpg)
1. Не сканируется @SpringBootTest2. Не сканируется другими конфигурациями и тестами3. Не прерывает процесс сканирования @SpringBootTest
@TestConfiguration
![Page 178: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/178.jpg)
1. Запустим все тесты2. DeveloperAssistantApplicationTests.contextLoad падает3. Загрузил бины из другого теста!4. @TestConfiguration!5. DeveloperAssistantApplicationTests.contextLoad работает
Все ли хорошо?
![Page 179: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/179.jpg)
Почему упалДва бина одного типа в контексте
● answerCacheServiceJPABackend● answerCacheServiceJpaBackend
![Page 180: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/180.jpg)
Почему упалДва бина одного типа в контексте
● answerCacheServiceJPABackend● answerCacheServiceJpaBackend
Опять двадцать пять!
![Page 181: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/181.jpg)
1. Запустим все тесты2. DeveloperAssistantApplicationTests.contextLoad падает3. Загрузил бины из другого теста!4. @TestConfiguration!5. DeveloperAssistantApplicationTests.contextLoad работает6. А AnswerCacheServiceJPABackendTest перестал7. Загрузил бины из другого теста!
Все ли хорошо?
![Page 182: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/182.jpg)
Spring Заговор
![Page 183: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/183.jpg)
1.
Как @SpringBootTest сканирует пакеты
![Page 184: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/184.jpg)
Два процесса сканирования1. @SpringBootTest сканирование2. @SpringBootApplication (@ComponentScan)
![Page 185: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/185.jpg)
Два процесса сканирования1. @SpringBootTest сканирование2. @SpringBootApplication (@ComponentScan)
Вверх
![Page 186: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/186.jpg)
Два процесса сканирования1. @SpringBootTest сканирование2. @SpringBootApplication (@ComponentScan) Вниз
Вверх
![Page 187: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/187.jpg)
@SpringBootTest
Два процесса сканирования
![Page 188: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/188.jpg)
@SpringBootTest
Два процесса сканирования
![Page 189: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/189.jpg)
@SpringBootTest
Два процесса сканирования
![Page 190: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/190.jpg)
Два процесса сканирования
@SpringBootTest
![Page 191: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/191.jpg)
Два процесса сканирования
@SpringBootTest
test classpath extends main classpath
![Page 192: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/192.jpg)
![Page 193: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/193.jpg)
Два процесса сканирования
@SpringBootTest
@SpringBootApplication
src/main будет так же просканирован*
test classpath extends main classpath
![Page 194: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/194.jpg)
Два процесса сканирования
@SpringBootTest
@SpringBootApplication
src/main будет так же просканирован*
test classpath extends main classpath
![Page 195: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/195.jpg)
Два процесса сканирования
@SpringBootTest
@SpringBootApplication
src/main будет так же просканирован*
test classpath extends main classpath
![Page 196: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/196.jpg)
Два процесса сканирования
@SpringBootTest
@SpringBootApplication
src/main будет так же просканирован*
test classpath extends main classpath
![Page 197: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/197.jpg)
Два процесса сканирования
@SpringBootTest
@SpringBootApplication
src/main будет так же просканирован*
test classpath extends main classpath
![Page 198: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/198.jpg)
Тоже и сsrc/main/**
![Page 199: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/199.jpg)
Как чинить@SpringBootApplication@EnableFeignClients@EnableConfigurationProperties(AssistantProperties.class)public class DeveloperAssistantApplication {
public static void main(String[] args) { SpringApplication.run(DeveloperAssistantApplication.class, args);}
}
![Page 200: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/200.jpg)
Как чинить@SpringBootApplication@EnableFeignClients@EnableConfigurationProperties(AssistantProperties.class)public class DeveloperAssistantApplication {
public static void main(String[] args) { SpringApplication.run(DeveloperAssistantApplication.class, args);}
}
![Page 201: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/201.jpg)
Как чинить@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication {
![Page 202: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/202.jpg)
Как чинить@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication {
![Page 203: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/203.jpg)
Как чинить/** * @author Phillip Webb * @since 1.4.0 */@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Configurationpublic @interface SpringBootConfiguration {
}
![Page 204: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/204.jpg)
1. Запустим все тесты2. DeveloperAssistantApplicationTests.contextLoad падает3. Загрузил бины из другого теста!4. @TestConfiguration!5. DeveloperAssistantApplicationTests.contextLoad работает6. А AnswerCacheServiceJPABackendTest перестал7. Загрузил бины из другого теста!8. @SpringBootConfiguration остановит сканирование
Все ли хорошо?
![Page 205: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/205.jpg)
@SpringBootConfigurationpublic class StopConfiguration {
}
В нужном пакете!
Чиним
![Page 206: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/206.jpg)
@SpringBootConfiguration
Нужный пакет для остановки
![Page 207: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/207.jpg)
Component Tests
![Page 208: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/208.jpg)
Spring Boot обновки
1. @SpringBootTest2. @TestConfiguration3. @MockBean && @SpyBean4. @DataJpaTest5. @MockMvcTest
![Page 209: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/209.jpg)
@DataJpaTest
1. сканирует все репозитории
![Page 210: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/210.jpg)
@DataJpaTest
1. сканирует все репозитории2. конфигурирует EntityManager3. загружает другие конфигурации
![Page 211: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/211.jpg)
1. сканирует все репозитории2. конфигурирует EntityManager3. загружает другие конфигурации4. фильтрует все не относящееся к Data/JPA
Применим знания
@DataJpaTest
![Page 212: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/212.jpg)
Тестируем DefaultAssistantJpaBackendTest1. @DataJpaTest не загружает компоненты Spring*
![Page 213: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/213.jpg)
Тестируем DefaultAssistantJpaBackendTest1. @DataJpaTest не загружает компоненты Spring*2. Делаем конфигурацию, загружаем недостающее
![Page 214: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/214.jpg)
Тестируем DefaultAssistantJpaBackendTest1. @DataJpaTest не загружает компоненты Spring2. Делаем конфигурацию, загружаем недостающее3. Ничего не работает, из за @SpringBootConfiguration
![Page 215: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/215.jpg)
Тестируем DefaultAssistantJpaBackendTest1. @DataJpaTest не загружает компоненты Spring*2. Делаем конфигурацию, загружаем недостающее3. Ничего не работает, из за @SpringBootConfiguration4. Переносим в новый package – все @*Test тесты должны быть
изолированы
![Page 216: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/216.jpg)
@WebMvcTest
1. Не грузит компоненты спринга
![Page 217: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/217.jpg)
@WebMvcTest
1. Не грузит компоненты спринга2. Грузит только то что относится к Web
![Page 218: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/218.jpg)
@WebMvcTest
1. Не грузит компоненты спринга2. Грузит только то что относится к Web3. Сразу изолируем в отдельный пакет
Получаем суперспособность:
@AutowiredMockMvc mockMvc;
![Page 219: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/219.jpg)
Где настраивать @MockBean1. В @*Configuration –
если мок нужен на этапе создания контекста2. В тесте (@Before/setup/etc)
если мок нужен только на этапе выполнения теста
![Page 220: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/220.jpg)
Что же делает @SpringBootTest1. Без classes
a. сканирует со своего пакета “вверх” в поисках @SpringBootConfigurationi. игнорирует остальных
b. падает если не находит или находит несколько в одном пакете
2. classes=~@Configurationa. поднимет только указанные конфигурации
3. classes=~@TestConfigurationa. поднимет указанный контекст и продолжит сканирование. см пункт 1
![Page 221: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/221.jpg)
Зачем нужен @SpringBootTest1. Полный тест на весь контекст2. Изменение properties3. Тесты с определенным скоупом – пакет/конфигурация/автоскан
![Page 222: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/222.jpg)
Зачем нужен @TestConfiguration1. Если нужно не прерывать сканирование @SpringBootTest2. Изолированные тесты (игнорируется при сканировании)
![Page 223: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/223.jpg)
Зачем нужен @SpringBootConfiguration1. Прерывать сканирование инициированное @SpringBootTest
![Page 224: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/224.jpg)
Есть два типа тестовКакой сам выберешь, а какой разработчику оставишь?
Простой Сложный
![Page 225: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/225.jpg)
Простой Сложный
Понятный
Есть два типа тестовКакой сам выберешь, а какой разработчику оставишь?
![Page 226: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/226.jpg)
1. Не боимся залезать в кишки приложения2. Spring Boot богат на инструменты для тестирования3. Но вносит свои ограничения – структура тестов
Выводы
![Page 227: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/227.jpg)
Шкала Тестов
UnitComponent Test
Microservice TestSystem Test
➯ ➯➯ ➯ Следующий доклад
![Page 228: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/228.jpg)
Unit Component Microservice
Что нужно Junit/Mockito @ContextConfiguration @SpringBootTest
Кто управляет new Spring Spring Boot
![Page 229: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/229.jpg)
QA
229
![Page 230: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/230.jpg)
1. @ComponentScan > @TestConfiguration > @Configuratin! @ComponentScan находит даже @TestConfiguration
2. @DataJpaTest > @SpringBootTest3. @DataJpaTest и @WebMvcTest должны быть в отдельных пакетах
Если есть сомнения – смотри автора! Juergen Hoeller*
Дополнительно
![Page 231: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/231.jpg)
Замечания1. Spring для Unit тестирования может быть быстрым
![Page 232: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/232.jpg)
1. Spring для Unit тестирования может быть быстрым2. Кэш контекстов – хрупкая штука
Замечания
![Page 233: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/233.jpg)
1. Spring для Unit тестирования может быть быстрым2. Кэш контекстов – хрупкая штука3. Для тестов – только @TestConfiguration
Замечания
![Page 234: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/234.jpg)
1. Spring для Unit тестирования может быть быстрым2. Кэш контекстов – хрупкая штука3. Для тестов – только @TestConfiguration4. Изолировать группы тестов с помощью
Замечания
![Page 235: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/235.jpg)
1. Spring для Unit тестирования может быть быстрым2. Кэш контекстов – хрупкая штука3. Для тестов – только @TestConfiguration4. Изолировать группы тестов с помощью
a. выделения в пакетыb. @SpringBootConfiguration
Замечания
![Page 236: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/236.jpg)
1. Spring для Unit тестирования может быть быстрым2. Кэш контекстов – хрупкая штука3. Для тестов – только @TestConfiguration4. Изолировать группы тестов с помощью
a. выделения в пакеты (особенно для @*Test)b. @SpringBootConfiguration
5. SpringBootTest надо в основном использоватьдля микросервис тестов
Замечания
![Page 237: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/237.jpg)
1. Spring для Unit тестирования может быть быстрым2. Кэш контекстов – хрупкая штука3. Для тестов – только @TestConfiguration4. Изолировать группы тестов с помощью
a. выделения в пакетыb. @SpringBootConfiguration
5. SpringBootTest надо в основном использоватьдля микросервис тестов
6. Если есть DirtiesContext – стоит задуматься :)
Дополнительно
![Page 238: Тестируем и плачем · Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Unit/Component тесты. Для чего? Ваши](https://reader036.fdocuments.us/reader036/viewer/2022062508/6043543b73abcd76a473ec1d/html5/thumbnails/238.jpg)
1. Demo Source with Spring Boot 2.1 and Gradle — https://github.com/lavcraft/spring-boot-curse
2. Old Demo Source with Spring Boot 1.5 and Maven — https://github.com/lavcraft/conference-test-with-spring-boot-test
3. Spring Test Reference Guide4. Spring Boot Test Reference Guide5. Spring 1.4 Test Improvements6. Custom Test Slice with Spring Boot
Ссылки