Для одного из моих проектов я использую JUnit 5 для тестирования кода отражения, который требует большого количества классов для тестовых случаев. Бросить их все в одну область и попытаться назвать их разумно, почти невозможно, поэтому я надеюсь поместить и методы тестирования, и типы, которые тестируются, в класс-член stati c. Это позволило бы мне повторно использовать имена, такие как X
или Y
, в каждом тесте и держать тестируемые типы рядом с кодом, который их тестирует. (Классы-члены должны быть stati c, чтобы я мог добавить интерфейсы)
Если я просто добавлю классы stati c, тесты будут работать из коробки, но в окончательном отчете я получу все классы-члены перечислены отдельно, поэтому я хотел бы иметь возможность объединить их все в один класс в отчете.
Вот пример того, чего я хотел бы достичь: (Я фактически пишем тесты в Kotlin, но это эквивалент Java кода)
class MethodTests {
static class WhateverName {
interface X {}
class Y implements X {}
@Test
void something_withInterfaceSupertype_shouldReturnThing() {
// ...
}
@Test
void other_withInterfaceSupertype_shouldReturnThing() {
// ...
}
}
static class WhateverOtherName {
interface X {
void m();
}
class Y implements X {
void m() {}
}
@Test
void something_withInterfaceSupertype_andMethodImpl_shouldReturnOtherThing() {
// ...
}
}
// This might actually be even better, since I wouldn't need `WhateverName`
@Test // not valid, but maybe I could annotate the class instead of the method?
static class something_withInterfaceSupertype_shouldReturnThing_2ElectricBoogaloo {
interface X {}
class Y implements X {}
@Test
void runTest() {
// ...
}
}
}
В настоящий момент отчет по тестам в IDEA имеет такую структуру:
- MethodTests
- someRoot_testHere
- MethodTests$WhateverName
- something_withInterfaceSupertype_shouldReturnThing
- other_withInterfaceSupertype_shouldReturnThing
- MethodTests$WhateverOtherName
- something_withInterfaceSupertype_andMethodImpl_shouldReturnOtherThing
- MethodTests$something_withInterfaceSupertype_shouldReturnThing_2ElectricBoogaloo
- runTest
Но я бы хотел, чтобы отчет о тестировании был структурирован следующим образом:
- MethodTests
- someRoot_testHere
- something_withInterfaceSupertype_shouldReturnThing
- other_withInterfaceSupertype_shouldReturnThing
- something_withInterfaceSupertype_andMethodImpl_shouldReturnOtherThing
- something_withInterfaceSupertype_shouldReturnThing_2ElectricBoogaloo
Я пытался использовать @DisplayName
в классах-членах, но это просто привело к дублированию имени в отчете. До сих пор я думаю, что, возможно, захочу использовать расширение, но после небольшого исследования я не нашел способа изменить класс, под которым тест перечислен в отчете, используя их.