Я новичок в JUnit и пытаюсь протестировать весенний веб-сервис, который использует JPA DAO. Мне нужно протестировать метод обслуживания, аналогичный приведенному ниже.JUnit тестирование транзакционных методов
Метод обслуживания аннотируется с помощью метода @Transactional(propagation=Propagation.REQUIRED)
и ServiceObjectRepository.update()
, который вызывает собственный SQL-запрос для обновления db.
@Transactional(propagation=Propagation.REQUIRED)
public void serviceMethod(){
//Read DB for ServiceObject to update
//Call ServiceObjectRepository.update() method to update DB
}
ServiceObjectRepository
public interface ServiceObjectRepository extends JpaRepository<ServiceObject, Integer> {
@Query(value ="UPDATE serviceobjcet AS c SET c.objectstatus= :os WHERE c.objid = :oi", nativeQuery = true)
public Integer update(@Param("os")short objStatus,@Param("oi")int objId);
}
TestClass
@TransactionConfiguration(defaultRollback=true)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
locations = "classpath:service-test.xml")
@Transactional
public class ServiceHandlerTest {
@Test
public void testServiceMethod() {
//Create ServiceObject and save to DB
//Call serviceMethod()
//Read DB for updatedServiceObject
assertEquals("Test: Object should be in updated state", new Short(3), updatedServiceObject.getObjectstatus(), 0);
}
}
Мои тестовые запуски и откатить БД транзакций. Но проблема в том, что когда я читаю updatedServiceObject
после вызова serviceMethod
, он не возвращает обновленный объект. Поэтому мой тест завершился неудачей с использованием исключения NullPointerException в assertEquals
. Есть идея решить эту проблему?