Spring Должен ли я использовать @DirtiesContext для каждого класса

У меня есть критерий junits для сегментов

@ContextConfiguration(locations = { "file:../business/src/test/resources/application-context-test.xml",
        "file:src/main/webapp/WEB-INF/confA.xml", "classpath:/mvc-dispatcher-servlet-test.xml"})
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class ProductContentControllerTest {
...
}

Внутри класса все тесты должны выполняться в одном и том же контексте (это так).

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

Как это работает, контекст приложения запускается только один раз для каждого класса тестов?

Должен ли я добавить: @DirtiesContext (классMode = ClassMode.AFTER_CLASS)

для каждого тестового класса?

спасибо

Ответ 1

Spring кэширует контекст приложения по умолчанию при выполнении тестов. Ключ, который использует Spring для кеша, состоит из следующего:

  • (из @ContextConfiguration)
  • классы (из @ContextConfiguration)
  • contextInitializerClasses (из @ContextConfiguration)
  • contextLoader (из @ContextConfiguration)
  • activeProfiles (из @ActiveProfiles)
  • resourceBasePath (из @WebAppConfiguration)

Все сведения о кешировании можно найти в документации .

По моему опыту, редко требуется использовать @DirtiesContext, чтобы заставить Spring воссоздать контекст. Я не встречал слишком много ситуаций, когда это было необходимо - единственное, что приходит на ум, - это использование диспетчера общих кэшей.

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