Для тестов я использую:
- Spring Test 3.2.3.RELEASE
- JUnit 4.12
- Mockito 1.10.19
Следующий тестовый код должен сохранить некоторую сущность в базе данных, однако этого не происходит:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ControllerTestConfig.class})
public class ControllerTest {
@Autowired
SomeMapper someMapper;
@Test
public void shouldCreateSomeEntity() {
SomeEntity someEntity = new SomeEntity();
someEntity.setSomeProperty("property");
...
someMapper.createSomeEntity(someEntity);
}
...
}
Я использую смоделированную реализацию маппера:
@Configuration
public class ControllerTestConfig {
@Bean
public SomeMapper SomeMapper() {
return Mockito.mock(SomeMapper.class);
}
...
}
Поскольку реализациямоделируется, вызов метода перехватывается в классе org.mockito.internal.creation.cglib.MethodInterceptorFilter
.
. Отображатель является интерфейсом:
public interface SomeMapper {
@Insert("Insert into some_table (id, some_entity_id, type, full_name) values (#{id}, #{someEntityId}, #{type}, #{fullName})")
@SelectKey(statement="select nextval('seqid_static_data');", keyProperty="id", before=true, resultType=long.class)
void createSomeEntity(SomeEntity someEntity);
...
}
Таким образом, невозможно создать экземпляр этого преобразователя.Например, следующим образом:
@Bean
public SomeMapper SomeMapper() {
return new SomeMapper();
}
...
Как использовать сопоставители MyBatis в тестах Spring JUnit?
Буду очень признателен за информацию.
Спасибо всем.