Хорошо ли использовать класс, который вводится в родительский?

#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