Я хочу написать своего рода интеграционный тест для класса и «нижних» классов, которые он вызывает во время работы. Я хочу смоделировать соединение с базой данных, которое вызывается «нижним» классом, но я не нашел способа сделать это.
У меня есть класс, который вызывает другой класс, который вызывает базу данных через jdbcTemplate. Я хочу внедрить макет jdbcTemplate в низший класс, но мне кажется, что он внедряется в неправильный экземпляр класса. Код следует этому шаблону:
@Component
public class A {
@AutoWired
B b
public String someMethod() {
b.otherMethod();
}
}
@Component
public class B {
@AutoWired
jdbcTemplate jdbctemplate
public String otherMethod() {
jdbctemplate.query(args);
}
}
Тест выглядит следующим образом:
@RunWith(MockitoJUnitRunner.Silent.class)
public class aTestClass {
@Mock
JdbcTemplate jdbcTemplate;
@InjectMocks
B b;
@InjectMocks
A a;
@Test
public void aTest() {
a.someMethod();
}
}
Но когда я запускаю этот тест, я получаю исключение NullPointerException в a.someMethod () - кажется, что вызываемый B-объект является нулевым.
Проблема в том, что если я буду издеваться над B, то он никогда не будет вызывать jdbcTemplate, потому что это ложно.
Кто-нибудь может пролить некоторый свет на то, как я могу внедрить макет jdbcTemplate в B-объект, который вызывается A?