Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Даже если не говорить о полезности и правильности таких "тестов", почему бы просто не пропихнуть тестируемый инстанс через фабричный метод? Кода было бы даже меньше, и без рефлексии.
А здесь не надо?
MergeSortTest extends ISortTestA это как же?
А где плюс этого-то? Что не надо писать, одну строку? Серьёзно? Унесите это с хабра и закопайте где-нибудь.
Простейший пример — в конструктор каждой конкретной реализации нужно передать некие аргументы, всегда разные. Что делать будете?
Простейший пример — в конструктор каждой конкретной реализации нужно передать некие аргументы, всегда разные. Что делать будете?
@RunWith(Parameterized.class)
public class ISortTest {
private ISort sortAlgorithm;
public ISortTest(ISort sortAlgorithm) {
this.sortAlgorithm = sortAlgorithm;
}
@Test
public void sort() {
assertNotNull(sortAlgorithm);
int n = 10000;
int[] ints = new Random().ints().limit(n).toArray();
int[] sortInts = Arrays.stream(ints)
.sorted()
.toArray();
int[] testSotrInts = sortAlgorithm.sort(ints);
assertArrayEquals(sortInts, testSotrInts);
}
@Parameterized.Parameters
public static Collection<Object[]> data() {
return Arrays.asList(
new Object[] { new BubleSort() },
new Object[] { new MergeSort() }
);
}
}
class ISortTest {
@ParameterizedTest
@MethodSource("data")
void sort(ISort sortAlgorithm) {
assertNotNull(sortAlgorithm);
int n = 10000;
int[] ints = new Random().ints().limit(n).toArray();
int[] sortInts = Arrays.stream(ints)
.sorted()
.toArray();
int[] testSotrInts = sortAlgorithm.sort(ints);
assertArrayEquals(sortInts, testSotrInts);
}
static Stream<Arguments> data() {
return Stream.of(
Arguments.of(new BubleSort()),
Arguments.of(new MergeSort())
);
}
}
О применении рефлексии в тестировании и не только