#java #spring #unit-testing #junit
#java #весна #модульное тестирование #junit
Вопрос:
Давайте предположим, что у меня есть MyServiceTest
класс, который расширен некоторым HelperTest
классом, в котором определена конфигурация контекста и введена служба, подобная этой:
@ContextConfiguration(locations = { "classpath:META-INF/context.xml" })
public abstract class HelperTest {
@Autowired
private MyService myService;
}
Этот вспомогательный класс помогает тестовым классам подготовить систему к тестированию.
Теперь я хочу протестировать MyService
класс, что означает, что мне нужно внедрить эту службу в мой MyServiceTest
класс:
@RunWith(SpringJUnit4ClassRunner.class)
public class MyServiceTest extends HelperTest {
@Autowired
private MyService myService;
}
Но в целом, поскольку MyServiceTest
он унаследован, я мог бы просто определить MyService
в HelperTest as protected
и использовать его в MyService
классе.
Правильно ли это делать или есть какие-то другие вещи, которые могут повлиять, когда я использую bean-инъекцию через spring таким образом?
Комментарии:
1. В модульных тестах вы не должны загружать контекст spring, не использовать
SpringJUnit4ClassRunner
и@ContextConfiguration(...)
, использовать библиотеку, такую как mockito или JMockit, имитировать зависимости и пытатьсяMyService
изолировать их от своих сотрудников2. Ну, да, их использование больше похоже на интеграционные тесты, но это то, что я делаю. Я понимаю, что мне нужно имитировать зависимости, но я использую его больше для тестирования введенного фактического класса, хотя, конечно, я могу создать его с помощью явного вызова конструктора.
3. :), В противном случае, в вашем случае, ИМХО, я бы указал
MyService
, вMyServiceTest
котором находится место, куда вы идете, чтобы его протестировать. Кроме того, вы могли бы вставить@RunWith(SpringJUnit4ClassRunner.class)
HelperTest
. Затем вы можете использовать ихHelperTest
в других случаях или службах, просто наследующихHelperTest