Почему боб не вводится в тестовом классе - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть jar, который будет включен в приложение весенней загрузки, в этом я пытаюсь выполнить интеграционное тестирование, в проекте есть класс конфигурации для создания источника данных и шаблона JDBC, я использую тестирование,

В этом проекте нет класса приложения, когда этот jar-файл включен в другой проект, который отлично выбирает данные, но не в том же проекте

spring-boot-starter-test добавлен в качестве зависимости

Конфигурация

@Configuration
    public class DatabaseAccesManagementConfig {

        @Bean(name = "accessmngmtDataSource")
        @Qualifier("accessmngmtDataSource")
        @ConfigurationProperties(prefix = "accessmngmt.datasource")
        public DataSource accessmngmtDataSource() {
            return DataSourceBuilder.create().build();
        }

        @Bean(name = "accessmngmtJdbcTemplate")
        @Qualifier("accessmngmtJdbcTemplate")
        public JdbcTemplate accessmngmtJdbcTemplate(@Qualifier("accessmngmtDataSource") DataSource accessmngmtDataSource) {
            return new JdbcTemplate(accessmngmtDataSource);
        }
    }

Дао класс

 @Repository
    public class ResourcePrivilegesDao {
        static final  Logger log = LoggerFactory.getLogger(ResourcePrivilegesDao.class);
        @Autowired
        @Qualifier("accessmngmtJdbcTemplate")
        private JdbcTemplate jdbcTemplate;

        public List<RP> getAll() {
            log.debug("entering getAll()");
            String sql = "SELECT * FROM rp";
            RowMapper<RP> rowMapper = new RPRowMapper();
            List<RP> result = this.jdbcTemplate.query(sql, rowMapper);
            return result;
        }
    }

Тестовый класс

@SpringBootTest
@TestPropertySource(locations="classpath:application-test.properties")
@ContextConfiguration(classes = DatabaseAccesManagementConfig.class)
public class ResourcePrivilegesDaoTest {

    @Autowired
    DatabaseAccesManagementConfig databaseAccesManagement;

    @Autowired
    ResourcePrivilegesDao dao;

    @Test
    public void testGetAll() {
        System.out.println(databaseAccesManagement);
        List<ResourcePrivileges> list = dao.getAll();
        Assert.notNull(list, "No resource privileges found");
        Assert.notEmpty(list);
    }

}

свойство теста внутри

environment=test

#Access management db details
accessmngmt.database.url=//xxyyy/am
accessmngmt.database.username=user
accessmngmt.database.password=password

1 Ответ

0 голосов
/ 02 декабря 2018

В тестовом классе вы пропустили @RunWith(SpringRunner.class), который настраивает модульное тестирование, для которого требуется DI Spring.

Посмотрите на doc пружинный модульный тест

Чтобы модульный тест запустил пакетное задание, платформа должна загрузить ApplicationContext задания.Для этого используются две аннотации:

@ RunWith (SpringJUnit4ClassRunner.class): указывает, что класс должен использовать средства Spring JUnit

@ ContextConfiguration (location = {...}): указываеткакие XML-файлы содержат ApplicationContext.

Обратите внимание , что SpringRunner является псевдонимом для SpringJUnit4ClassRunner.Таким образом, мы можем использовать @RunWith(SpringRunner.class) вместо @RunWith(SpringJUnit4ClassRunner.class) с более коротким именем.

Обновлено:

Для внедрения свойств источника данных аннотацию @EnableConfigurationProperties следует аннотироватьна тестовом классе.

Кроме того, вы используете accessmngmt.datasource в DatabaseAccesManagementConfig классе, в то время как префикс не соответствует accessmngmt.database в application-test.properties.Здесь вы должны объединить их, чтобы вы могли добавить свойства в компонент.

...