Я использую Junit 5.7.0. У меня есть класс с методом настройки, который я хочу запустить перед каждым вложенным классом, и метод разрыва, который я хочу запустить после каждого вложенного класса, но не до и после каждого метода испытаний в вложенных классах.class BatchJob0TestClass
{
@BeforeEach
public void setUp()
{
//set up test data
}
@AfterEach
public void tearDown()
{
//tear down test data
}
@Nested
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@DisplayName("Given only good records in the database")
class AllGoodRecordsTest
{
@Test
@Order(1)
@DisplayName("Then the job should finish successfully")
void shouldSucceed()
{
//run batch job and check that it exited as successful
}
@Test
@Order(2)
@DisplayName("Then some value X should change from '0' to '1' for all test records")
void shouldChangeSomeValueXFrom0To1ForAllTestRecords()
{
//verify that some value X changed from '0' to '1' for all test records
}
}
@Nested
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@DisplayName("Given one record in the database where the data is bad")
class OneRecordIsBadTest
{
@BeforeEach
void setup()
{
//change default test set up to have the data of one record be bad
}
@Test
@DisplayName("Then the job should finish as failed")
void shouldFail()
{
//run batch job and verify that it exited as failed
}
}
@Nested
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@DisplayName("Given another record in the database where the data is bad in a different way")
class AnotherRecordIsBadInADifferentWayTest
{
@BeforeEach
void setup()
{
//change default test set up to have another record be bad in a different way
}
@Test
@DisplayName("Then the job should finish as failed")
void shouldFail()
{
//run batch job and verify that it exited as failed
}
}
}
< /code>
Другая итерация вышеупомянутых приведенных выше @beforeall и @afterall, соответственно, для методов setup () и teardown (). < /p>
class BatchJob0TestClass
{
@BeforeAll
public static void setUp()
{
//set up test data
}
@AfterAll
public static void tearDown()
{
//tear down test data
}
@Nested
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@DisplayName("Given only good records in the database")
class AllGoodRecordsTest
{
@Test
@Order(1)
@DisplayName("Then the job should finish successfully")
void shouldSucceed()
{
//run batch job and check that it exited as successful
}
@Test
@Order(2)
@DisplayName("Then some value X should change from '0' to '1' for all test records")
void shouldChangeSomeValueXFrom0To1ForAllTestRecords()
{
//verify that some value X changed from '0' to '1' for all test records
}
}
@Nested
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@DisplayName("Given one record in the database where the data is bad")
class OneRecordIsBadTest
{
@BeforeEach
void setup()
{
//change default test set up to have the data of one record be bad
}
@Test
@DisplayName("Then the job should finish as failed")
void shouldFail()
{
//run batch job and verify that it exited as failed
}
}
@Nested
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@DisplayName("Given another record in the database where the data is bad in a different way")
class AnotherRecordIsBadInADifferentWayTest
{
@BeforeEach
void setup()
{
//change default test set up to have another record be bad in a different way
}
@Test
@DisplayName("Then the job should finish as failed")
void shouldFail()
{
//run batch job and verify that it exited as failed
}
}
}
< /code>
Независимо от того, как я это делаю, я не могу получить желаемое поведение. Либо тестовые данные настраиваются или срываются по поводу каждого для каждого для внешнего класса, либо они настроены и снимаются для каждого метода испытаний. Я знаю, как сделать последнее, но я надеялся, что Юнит способен на желаемое поведение только через аннотации.
Подробнее здесь: https://stackoverflow.com/questions/792 ... -annotated