Я хотел бы проверить метод, который должен создать 2 транзакции. Но, похоже, я не могу получить доступ к сеансу в рамках второй транзакции (другой метод обслуживания с @Transactional(propagation = Propagation.REQUIRES_NEW)
). Эта проблема возникает только в тестах. Пример кода:
@Service
public class ServiceA implements A {
@Autowired
private ServiceB serviceB;
@Transactional
public void m1() {
//some actions with repositories
serviceB.m2(id);
}
}
@Service
public class ServiceB implements B {
@Autowired
private RepositoryA repositoryA;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void m2(Long id) {
//some other actions
m3(repositoryA.findOne(id).getSomething()); // NPE is thrown here
//some other actions
}
}
Я получаю NullPointerException
, но только во время тестов (я уверен, что объект с таким идентификатором существует в моих тестовых данных). Когда я пытаюсь получить тот же объект в области первой транзакции, все работает, как ожидалось
public class ServiceATest extends BaseTest {
@Test
public void test() {
mockMvc.perform(get("/PATH_TO_A/" + ID).session(createSession(user)))
.andExpect(status().isOk());
}
}
Я получаю 404 HTTP-код вместо 200 по причине NullPointerException
.
Как обработать такой случай с несколькими транзакциями во время тестирования через JUnit?