воскресенье, 31 марта 2013 г.

Thucydides. Обработка исключений.

При добавлении в тестовые шаги начальных данных из БД столкнулся с тем, что стектрейс ошибки малоинформативен и по нему практически невозможно понять в каком месте произошла ошибка.

 Оказалось, что Thucydides нормально перехватывает только Exception типа AssertionError. Поэтому необходимо в ключевых местах пробрасывать именно AssertionError.

Например:

public void initializeConnection() throws SQLException {

    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    } catch (ClassNotFoundException e) {
        throw e;
    }
    String dbHost = null;
    try {
        dbHost = getCurrentDBConnectionUrl(DatabaseConst.TEST_SERVER, DatabaseConst.DB_NAME);
  
        connection = DriverManager.getConnection(dbHost, DatabaseConst.USER, DatabaseConst.PASS);
        query = connection.createStatement();
    } catch (SQLException e) {
        throw new SQLException("Cannot connect to Database " + dbHost);
    }
}

public String getSomeResults() throws Throwable{
    try{
        initializeConnection();
        //...queries
    catch(Throwable cause) {
        throw new AssertionError("Exeception while getting some results", cause); 
    }

В результате видим следующий стек-трейс:


java.lang.AssertionError: Exeception while getting some results
    at mypackage.Database.getSomeResults(Database.java:219)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at net.thucydides.junit.runners.ThucydidesStatement.evaluate(ThucydidesStatement.java:21)
...
Caused by: java.sql.SQLException: Cannot connect to Database jdbc:sqlserver://MyDatabaseIP:1433;databaseName=MyDataBase
    at mypackage.Database.initializeConnection(Database.java:55)
...

Комментариев нет:

Отправить комментарий