Тестирование метода с 2 транзакциями - PullRequest
0 голосов
/ 30 октября 2018

Я хотел бы проверить метод, который должен создать 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?

...