попытка запустить репозиторий с автоматически подключенными кандидатами для тестирования

Мне было любопытно, есть ли у меня способ запустить репозиторий, содержащий автоматически подключенных кандидатов, с приложением main() (для целей тестирования).

я знаю, что проблема в том, что класс репо, содержащий main, не подключается в методе main(), что приводит к тому, что ни один из кандидатов с автоматическим подключением не подключается, но у меня возникли проблемы с поиском синтаксиса, чтобы это произошло.

Фрагмент примера кода приведен ниже, а также комментарии в разделе, где я столкнулся с проблемой.

@Repository
@Transactional
public class RepositoryImpl implements Repository {

    @Autowired
    JdbcTemplate jdbcTemplate;

    String query = "some query"

    @Override
    public boolean runQuery() {
        Object[] params = {param1, param2};
        boolean result = jdbcTemplate.queryForObject(query , params, Integer.class) == 1;
        return result;
    }

    //included just for testing purposes
    public static void main(String[] args) {
        /*this is where i would like to run runQuery() to see a sample output
        * something like this: 
        * repositoryImpl = new RepositoryImpl();
        * syso(repositoryImpl.runQuery());
        */
    }
} 

Я столкнулся с нулевым указателем, который исходит из шаблона jdbc, который не подключен должным образом. Может ли кто-нибудь указать мне, как автоматически связать класс с автономным приложением main ()?

Это вообще возможно?

Спасибо за вашу помощь!


person nashpatty    schedule 13.11.2017    source источник
comment
вы уверены, что ваш запрос возвращает что-то, я предполагаю, что вы получаете исключение NullPointerException здесь jdbcTemplate.queryForObject(query , params, Integer.class) поэтому, пожалуйста, покажите нам более подробную информацию, чтобы мы могли вам помочь   -  person YCF_L    schedule 13.11.2017
comment
кроме того, вы должны сравнивать целые числа, используя .equals(), а не ==   -  person YCF_L    schedule 13.11.2017
comment
к сожалению, единственное, что показывает мне трассировка стека, это java.lang.NullPointerException: null, а проблемная строка действительно jdbcTemplate.queryForObject(query , params, Integer.class)   -  person nashpatty    schedule 13.11.2017
comment
как я уже сказал, покажи нам свой запрос, пожалуйста   -  person YCF_L    schedule 13.11.2017
comment
Мне очень жаль, но запрос содержит конфиденциальную информацию, но я протестировал запрос в sql dev, чтобы убедиться, что получаю ожидаемый результат, и он там работает. Я даже распечатал строковую версию запроса и скопировал ее разработчику sql, чтобы убедиться, что она работает. Я почти уверен, что проблема связана с проводкой шаблона jdbc или его отсутствием. редактировать: позвольте мне предоставить образец   -  person nashpatty    schedule 13.11.2017
comment
Я могу помочь вам, если вы покажете мне свой запрос, вы можете заменить конфиденциальную информацию другими значениями.   -  person YCF_L    schedule 13.11.2017
comment
private static final String someCase = new StringBuilder().append("(case").append(" when count(*) >= 1 then 1").append(" else 0").append(" end) as some_case ").toString(); private static final String someQy = new StringBuilder().append("select ").append(someCase).append("from table_1 table1 ").append("where table1.table_1_id = ").append(" (select t1.table_1_id ").append(" from table_1 t1 ").append(" where t1.column1 = ? ").append(" and t1.column2 = ?) ").toString(); надеюсь, это поможет   -  person nashpatty    schedule 13.11.2017


Ответы (1)


Вы не можете легко автоматически подключить статический метод (маленький хак).

Самый простой способ что-то протестировать - это... написать тест ;)

@RunWith(SpringJUnit4ClassRunner.class)
public class RepositoryImplTest {

    @Autowired
    private Repository repository;

    @Test
    public void testJob() throws Exception {
        //when
        boolean val = repository.runQuery();

        Assert.assertTrue(val);
    }
}

Ознакомьтесь с разделом "Модульное тестирование".

person hya    schedule 13.11.2017
comment
@malhanniazi, если это поможет вам, вы должны принять ответ, прочитанный Как принимает ответить на работу? - person YCF_L; 14.11.2017