оказалось что проблема с verify не проще
Имеем следующую реализацию "мягкой" проверки:
public static void assertTrue(boolean condition, String message) throws Exception {
try {
Assert.assertTrue(condition, message);
} catch (AssertionError ae) {
throw new Exception(" \n" + ae.getMessage());
}
}
//**Мягкая проверка*/
public static void verifyTrue(boolean condition, String message) throws Exception{
try {
assertTrue(condition,message);
} catch (Throwable e) {
addVerificationFailure(e); //Добавление стектрейса в пул ошибок, дабы в конце теста вывелись все.
}
}
Имеем следующий код вызова проверки:
private void checkFieid1()throws Exception{
try{
...
commonFunc(...);
...
}catch(Exception e)
throw new Exception("Тестирование поля 1 не пройдено\n" + e.getMessage, e)
}
private void checkFieid2()throws Exception{
try{
...
commonFunc(...);
...
}catch(Exception e)
throw new Exception("Тестирование поля 2 не пройдено\n" + e.getMessage, e)
}
private void commonFunc(...)throws Exception{
try{
...
verifyTrue(...,message);
...
}catch(Exception e)
throw new Exception("message for common func", e)
}
@Test
public void createDocTest() throws Excetion{
try{
...
checkField1();
checkField2();
...
}catch(Exception e)
throw new Exception("Тест на создание документа не пройден", e)
}
Так как экшепн ловится в функции verifyTrue, логируется и там же и затухает: проброса выше не существует.
Получаем следущий стектрейс:
java.lang.Exception: expected:<true> but was:<false>
at ru.testing.TestBase.assertTrue(TestBase.java:37)
at ru.testing.TestBase.verifyTrue(TestBase.java:99)
at ru.testing.CreateDocTest.commonFunc(CreateDocTest.java:54)
at ru.testing.CreateDocTest.checkFieid1(CreateDocTest.java:88)
at ru.testing.CreateDocTest.createDocTest(CreateDocTest.java:173)
Но! Нам необходимо вывести сообщение:
Тест на создание документа не пройден
Тестирование поля 1 не пройдено
message for common func
Какое-то сообщение передавамое в verify
expected:<true> but was:<false>
Какие видятся варианты решения проблемы:
1. Создать свой exception: все проверки verify засунуть в try{..}catch(MyException m){...}
В catch добавлять дополнительное сообщение. Возмоно что-то более хитрое используя свой exception.
2. В функцию добавить новый передаваемый параметр Message, в которые добавлять текст, обозначающий из какого метода функция была вызвана.
private void checkFieid1()throws Exception{
...
commonFunc(...,"Ощуствляется проверка поля field1");
}
private void commonFunc(parentMessage)throws Exception{
..
String message = parentMessage + "\nПроверка не пройдена\n"
verifyTrue(.., message);
}3. Т.к. все сообщения уже содержатся в блоке сatch соотвествующего метода, создать файл содержащий все сообщения. В throws new Exception(будет строковая константа для конкретного метода)Но остается проблема - как быстро узнать родительский метод для конкатенации итоговой строки...
В общем, я что-то совсем запутался. Какой бы метод вывода сообщения выбрали вы? Или есть какой-то более простой метод выхода из описанной ситуации?


