Я пишу тест JUnit и хочу запустить тест, в котором объект имеет несколько различных переменных. Я избегаю глубоко вложенных циклов, передавая запускаемые объекты.
private Runnable withAges( final Person person, final Runnable r ) {
return () -> {
person.setAge( 0 );
r.run();
person.setAge( 50 );
r.run();
person.setAge( Integer.MAX_VALUE );
r.run();
person.setAge( -1 );
r.run();
person.setAge( Integer.MIN_VALUE );
r.run();
};
}
private Runnable withHair( final Person person, final Runnable r ) {
return () -> {
person.setHair( "blonde" );
r.run();
person.setHair( "BLONDE" );
r.run();
person.setHair( null );
r.run();
};
}
private Runnable withAddresses( final Person person, final Runnable r ) {
...
}
private Runnable withChildren( final Person person, final Runnable r ) {
...
}
С фактическим тестом:
@Test
void testPerson() {
final Person person = new Person();
final Runnable tests = () -> {
assertTrue( ... );
assertFalse( ... );
}
...
}
В настоящее время я могу запустить эти тесты, используя
withAges( person,
withHair( person,
withAddresses( person,
withChildren( person, tests ) ) ) );
Однако было бы здорово, если бы я мог почистить это, написав что-то вроде
withAges( person ).withHair( person ).withAddresses( person ).withChildren( person ).tests.run();