Um.
ДЛЯ РЕШЕНИЯ JAVA! Я не знаю, на каком языке ты программируешь!
Хорошо, я только что прочитал «Чистый код» одной из книг Мартинса, в которой утверждается, что идея рефакторинга тестового кода, чтобы он оставался чистым и читаемым, была хорошей идеей, хотя и не целью. Таким образом, амбиции реорганизовать и содержать код в чистоте - это хорошо, а не глупая идея, как я сначала подумал.
Но это не то, что вы спросили, поэтому давайте попробуем ответить!
Я бы сохранил базу данных ваших тестов - или, в любом случае, последний результат теста.
С небольшим количеством java-аннотаций вы можете сделать что-то вроде этого:
@SuperTestingFramerworkCapable
public class MyFancyTest {
@TestEntry
@Test
public testXEqualsYAfterConstructors(){
@TestElement
//create my object X
@TestElement
//create my object Y
@TheTest
AssertTrue(X.equals(Y));
}
}
В любом случае вам также понадобится суперкласс по обработке отражений и аннотаций, который будет проверять этот код. Это может быть просто дополнительный шаг в вашей обработке - написать тесты, пройти через этот суперпроцессор, а затем, если он пройдет, запустить тесты.
И ваш супер процессор будет использовать схему
MyFancyTest
И для каждого члена вашего класса он будет использовать новую таблицу - здесь (единственной) таблицей будет testXEqualsYAfterConstructors
И в этой таблице будут столбцы для каждого элемента, помеченного аннотацией @TestElement. И это также будет иметь столбец для @TheTest
Я полагаю, что вы просто позвоните в столбцы TestElement1, TestElement2 и т. Д.
И ТОГДА, как только он все это настроит, он просто сохранит имена переменных и строку с аннотацией @TheTest.
Таким образом, таблица будет
testXEqualsYAfterConstructors
TestElement1 | TestElement2 | TheTest
SomeObjectType X | SomeObjectType X | AssertTrue(X.equals(Y));
Итак, если суперпроцессор уходит и обнаруживает, что таблицы существуют, то он может сравнить то, что уже есть, с тем, что сейчас в коде, и может выдать предупреждение для каждой отличающейся записи. И вы можете создать нового пользователя - администратора - который может получать изменения и может проверять их, стиль тиглей и, в порядке или нет, их.
И тогда вы можете продать это решение для этой проблемы, продать свою компанию за 100M и дать мне 20%
ура!
Медленный день, вот рациональное:
Ваше решение использует много дополнительных накладных расходов, что наиболее вредно для реального производственного кода. Ваш prod-код никогда не должен быть привязан к вашему тестовому коду, и, конечно, в нем не должно быть случайных величин, специфичных для теста
Следующее предложение, которое у меня есть с кодом, который вы создали, заключается в том, что ваш фреймворк не мешает людям ломать тесты. В конце концов, вы можете иметь это:
@Test
public void equalsIfSameObject()
{
Person expected = createPerson();
Person actual = expected;
check(Person.FEATURE_EQUAL_IF_SAME_OBJECT);
boolean isEqual = actual.equals(expected);
assertThat(isEqual).isTrue();
}
Но если я изменю последние две строки кода в каком-то "рефакторинге" тестовых классов, то ваша среда сообщит об успехе, но тест ничего не даст. Вы действительно должны убедиться, что оповещение поднято, и люди могут смотреть на «разницу».
Опять же, вы можете просто использовать SVN или Perforce и тигель, чтобы сравнить и проверить это!
Кроме того, увидев, что вы заинтересованы в Новой идее, вы захотите прочитать о местных аннотациях: /3801481/kak-ya-mogu-sozdat-protsessor-annotatsii-kotoryi-obrabatyvaet-lokalnuy-peremennuy
Хм, поэтому вам, возможно, понадобится получить этого парня - см. Последний комментарий по ссылке выше - вам также может понадобиться его собственный компилятор java.
@ Отказ от ответственности
Если вы создаете новую компанию с кодом, который в значительной степени соответствует вышеприведенному, я оставляю за собой право на 20% компании, если и когда вы стоите более 30 миллионов, в момент моего выбора