У меня вопрос об использовании SpringJUnit4ClassRunner
. Для чистых приложений Junits или Unit Test мы должны использовать аннотации на основе Spring, такие как @Autowired
, вместе с SpringJUnit4ClassRunner
или использовать вместо этого MockitoJUnitRunner
вместо аннотации @RunWith
в верхней части тестового класса?
Я имею в виду замену
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-applicationContext.xml" })
с просто
@RunWith(MockitoJUnitRunner.class)
в верхней части класса. Это работает для меня.
В Junits мы обычно не делаем никаких внешних вызовов, таких как звонки в БД или вызов какой-либо другой веб-службы. Мы должны издеваться над этими внешними вызовами, используя аннотации @Mock
для этих объектов службы. А затем создайте реальный объект класса, который мы тестируем, и это зависит от этих макетов. Затем мы можем использовать @InjectMocks
на реальном объекте так, чтобы он вводился с издеваемыми объектами.
Пример Service-A- > Calls- > Service-B- > Calls- > Service-C
Во время тестирования A мы должны посмеяться над сервисом B и при тестировании Service-B мы должны высмеять Service-C.
Некоторые фрагменты кода
@RunWith(MockitoJUnitRunner.class)
public class TestServiceA {
@Mock
B mockObj;
@InjectMocks
A realObj;
@Test
public void testServiceA() {
.....
.....
}
}
Итак, я считаю, что для случаев Unit Test нам не нужно полагаться на контейнер Spring, чтобы предоставить нам экземпляр класса, который мы тестируем.
Пожалуйста, дайте свои предложения.
Использование SpringJUnit4ClassRunner.class вместо MockitoJUnitRunner.class