оказалось что проблема с 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(будет строковая константа для конкретного метода)
Но остается проблема - как быстро узнать родительский метод для конкатенации итоговой строки...
В общем, я что-то совсем запутался. Какой бы метод вывода сообщения выбрали вы? Или есть какой-то более простой метод выхода из описанной ситуации?