StringBuilder request = new StringBuilder("exec dbo.MyClassOpenFunction");
request.append(" '");
request.append(userName);
request.append("', ");
request.append(sessionDay);
request.append(", ");
request.append(sessionId);
Session currentSession = sessionFactory.getCurrentSession();
MyClass myClass = (MyClass) currentSession.createSQLQuery(request.toString())
.uniqueResult();
Как правильно протестировать данный кусок кода с помощью Mockito
делаю так
SessionFactory sessionFactory = Mockito.mock(SessionFactory.class);
Session session = Mockito.mock(Session.class);
Query query = Mockito.mock(Query.class);
Mockito.when(sessionFactory.getCurrentSession()).thenReturn(session);
Mockito.when(session.createQuery(any())).thenReturn(query);
Mockito.when(query.uniqueResult()).thenReturn(new MyClass(1111, 20171111, "user_code"));
Но получаю
Caused by: java.lang.NullPointerException: null
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:159) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:183) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:157) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1881) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1858) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.loader.Loader.doQuery(Loader.java:906) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:348) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2550) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2536) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2366) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.loader.Loader.list(Loader.java:2361) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:340) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1752) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:232) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:157) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
at org.hibernate.internal.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:909) ~[hibernate-core-4.2.15.Final.jar:4.2.15.Final]
Вы не описали возврат для вызова
currentSession.createSQLQuery(request.toString())
Ну и плюс где-то в недрах hibernate есть объект, который вам тоже надо мокнуть, но для начала надо выяснить какой и мокнуть всю цепочку =)
А в общем по вопросу:
Вам не надо тестировать объекты hibernate они уже оттестированы. Единственное тут написанное вами это построение request
. Вынесите его в отдельный метод и протестируйте. Пытаться мокнуть весь hibernate на мой взгляд довольно трудоемко и не стоит таких усилий.
Проще и быстрее сделать полноценный тест со встроенной БД. Тест будет короче понятнее и возможно даже быстрее работать.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Создаю простое приложение которое должно хранить данные пользователя в текстовом файле (один для всех пользователей), авторизация также...
Как можно обновить все фрагменты view pager? То есть чтобы фрагменты создались заново, в том числе текущий