Как получить Hibernate Envers с тестированием интеграции Spring? - PullRequest
0 голосов
/ 02 октября 2019

Есть ли способ заставить Hibernate Envers запускать немедленно при вызове для сохранения или обновления вместо перехода в конце транзакции?

Iна моей аннотации @Transactional (фактически сквозной тест). Поскольку в коде нет тестовых методов, я не могу добавить в него "сброс" или что-то еще (если не считать редактирования не тестового кода, что не является желанием).

Я не уверен, как заставить журнал Envers работать над вызовами. Мне нужно, чтобы он работал, поскольку я использую таблицы аудита Envers для проверки старых записей во время выполнения и хотел бы создать контрольные примеры для этой функции.

У меня есть следующий код для модульного тестирования:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("/src/webapp")
@EnableWebMvc
@Transactional
@TestPropertySource(locations= {"classpath:/config/common.properties"}, properties = {"..."})
@ContextConfiguration(locations = {"..."})
public class Test {
    @Autowired
    private WebApplicationContext wac;

    @Autowired
    private UserDetailsService detailsService;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac)
            .build();
    }

    ...
}

1 Ответ

0 голосов
/ 02 октября 2019

Я думаю, что этот ответ поможет вам получить максимально возможное решение.

Ваш класс должен быть изменен следующим образом:

Примечание. Избегайте @Transactional на уровне класса. Всегда переходите на уровень метода.

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("/src/webapp")
@EnableWebMvc
@TestPropertySource(locations= {"classpath:/config/common.properties"}, properties = {"..."})
@ContextConfiguration(locations = {"..."})
public class Test {

    @Autowired
    private WebApplicationContext wac;

    @Autowired
    private UserDetailsService detailsService;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac)
            .build();
    }

    // example
    @Test
    @Transactional
    @Rollback(true)
    public void testAddUserDetails()
    {
        // code
    }
    ...
}

Я добавил полезный ресурс, который поможет вам понять. Отметьте здесь

...