Тестовый объемный класс с транзакцией и откатом - PullRequest
0 голосов
/ 08 мая 2019

Я написал интеграционный тест с несколькими тестами, которые основаны друг на друге.Таким образом, методы тестирования не являются независимыми, и порядок выполнения предписан @FixMethodOrder(MethodSorters.NAME_ASCENDING) и соглашением об именах.

@RunWith(SpringRunner.class)
@SpringBootTest
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@EnableTransactionManagement
public class AnIntegrationTest {
   @Test
   public void t001startProcess() {
       // ...
   }
   @Test
   public void t002addItem() {
       // ...
   }
}

Тест сохраняет созданные данные в базе данных теста H2, и последующие тесты не будут выполнены при выполнении внабор тестов.

Как можно объединить все тесты класса с транзакцией и откатить все модификации базы данных после того, как все тесты класса были выполнены?

1 Ответ

0 голосов
/ 08 мая 2019

Я знаю, что это не может быть идеальным решением для ваших требований, но вот некоторая помощь

Если для интеграционного теста требуется выполнение операции SELECT/UPDATE над добавленными строками, вы можете выполнить запрос insert в классе теста в аннотированном методе @Before, а затем запрос delete в @After аннотированный метод.

Это обеспечит добавление и последующее удаление записей при каждом выполнении метода тестирования. Но если вы хотите, чтобы данные, обновленные в одном тестовом методе, присутствовали во время следующего выполнения тестового метода, то это решение не будет работать

Пример

Class ClassToBeTested {

      @Before
      public void setUp() {
      // write insert queries here
      }

      @Test
      public void method1() {
      // Integration test here
      }

      @Test
      public void method2() {
      // Integration test here
      }

      @After
      public void destroySetUp() {
      // write delete queries here
      }
}
...