Есть ли у SpringRunner автоматическое подключение MockitoJUnitRunner - PullRequest
0 голосов
/ 15 марта 2019

Я вижу, что мое колледж обновил приложение Spring (1.5 -> 2.1) и заменил

import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)

на

import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)

, поскольку пакет Mockito from runners устарел https://www.baeldung.com/mockito-deprecated-mockitojunitrunner. При самом прямом подходе он должен просто переключить пакет, как описано в статье, но он изменил его на совершенно другой бегун, а именно SpringRunner.

Если вы прочитаете следующий ответ https://stackoverflow.com/a/49647467/978302

Вы понимаете, что SpringRunner просто загружает весь контекст Spring, что в облегченных модульных тестах не рекомендуется.Если вы все равно сделаете это с помощью SpringRunner, мне нужно правило, чтобы включить аннотацию @Mock.

Мне было интересно, как эта аннотация mockito работает только с тестом SpringRunner.

В журналах я вижумногие слушатели выполнения теста просто загружаются.

2019-03-15T15:14:04.728Z  INFO org.springframework.test.context.support.DefaultTestContextBootstrapper [main] () : Neither @ContextConfiguration nor @ContextHierarchy found for test class [com.xxx.order.platforms.tasks.ExportSellerTaskTest], using DelegatingSmartContextLoader
2019-03-15T15:14:04.735Z  INFO org.springframework.test.context.support.AbstractContextLoader [main] () : Could not detect default resource locations for test class [com.xxx.order.platforms.tasks.ExportSellerTaskTest]: no resource found for suffixes {-context.xml}.
2019-03-15T15:14:04.737Z  INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils [main] () : Could not detect default configuration classes for test class [com.xxx.order.platforms.tasks.ExportSellerTaskTest]: ExportSellerTaskTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
2019-03-15T15:14:04.788Z  INFO org.springframework.test.context.support.DefaultTestContextBootstrapper [main] () : Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
2019-03-15T15:14:04.802Z  INFO org.springframework.test.context.support.DefaultTestContextBootstrapper [main] () : Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@443118b0, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@765d7657, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@74235045, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@618b19ad, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2d3379b4, org.springframework.test.context.transaction.TransactionalTestExecutionListener@30c15d8b, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@5e0e82ae, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@6771beb3, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@51399530, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@6b2ea799, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@411f53a0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@2b71e916]

Одним из них является также MockitoTestExecutionListener .Именно поэтому аннотация @Mock работает из коробки?Этот слушатель загружен, потому что мы используем spring-boot-starter-test в проекте?https://github.com/spring-projects/spring-boot/blob/d5a197fe66285a9e357125f14febbb3514b97d7c/spring-boot-project/spring-boot-test/src/main/resources/META-INF/spring.factories

[INFO] +- org.springframework.boot:spring-boot-starter-test:jar:2.1.1.RELEASE:test
[INFO] |  +- org.mockito:mockito-core:jar:2.23.4:test 

Тестовый пример

@RunWith(SpringRunner.class)
public class SomeTest {

  @Mock 
  SomeClass someClass;

  @Test
  public void smokeTest() {
  }
}

Q: Если он уже имеет зависимость от spring-boot-starter-test вы можете комментировать тестовые классы с помощью SpringRunner и без ручного подключения, можно использовать Mockito.Кроме того, без указания конкретного контекста не будет установлено ничего, кроме TestExecutionListeners, а тесты будут по-прежнему сверхлегкими, верно?

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