SqlException во время тестирования SliM транзакционного метода в приложении Spring - PullRequest
1 голос
/ 04 декабря 2011

При запуске Fitnesse SliM для тестирования транзакционного метода в приложении Spring возникает исключение SQLException - источник данных закрыт.

Вот что происходит: В моем приложении метод importFile (String filename) считывает CSV-файл и обновляет данные до нескольких таблиц в базе данных. Это транзакционный метод весеннего применения. Таким образом, если при обновлении одной строки файла возникает исключение, все обновления отката этой строки и всех других строк (включая предыдущие строки и следующие строки) продолжают обновляться.

См. Ссылку по ссылке: Как определить транзакции отката, которые вызываются внутри цикла с помощью Spring AOP?

Шаг тестирования на странице запросов SliM FitNesse таблицы

1 Страница SetUp устанавливает данные тестирования с помощью файла установки

|Query: Test Case   |   test_file_setup.csv   |
|     name     |     phone     |     email     |
|     tom      |     123       |  tom@test.com |
|     dick     |     456       | dick@test.com |
|     harry    |     789       |harry@test.com |

результат: тестирование пройдено

2 Тестовая страница проверяет тестовый файл с недопустимой строкой, поэтому при выполнении этой строки выполняется только откат этой строки, но все остальные строки продолжаются, однако ... проверка завершилась неудачно, откат всех строк и закрытие источника данных ,

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

Это один тест SliM, но на каждой странице SetUp, Test и tearDown есть таблица запросов. Я предполагаю, что один фитнес-тест инициирует только один экземпляр контекста Spring. Скажи мне, если я ошибаюсь. Однако этот метод объявлен как транзакция в весеннем конфиге. Откат происходит, как и ожидалось, а тест - нет.

Вот мой тестовый класс

public class TestCase{

  private ImportFile importFile; 
  private String filename;

  public TestCase(String filename){
     this.filename = filename;
     init();
  }

  public void init(){
     //initialize the spring context
     //and get beans...
     importFile = (ImportFile) context.getBeans("importFile");
     start();
  }

  public void start(){
     //read rows from file...
     for( ... loop per row...){
        //this is a transactional method...
        //it reads the file and update every row to the database
        //it is supposed to row back one row (per loop) 
        //and continue if an exception thrown
        //but it rollback the all rows and close the datasource
        importFile.importFile(filename);
     }
  }

  public List<Object> query(){
     //read from database and return the test result to the Slim query table
     ...
     cleanup();
  }

  public void cleanup(){
     //close the spring context
     ...
  }
}

Похоже, что на тестовой странице Fitnesse запускает новый процесс тестирования (создает новый экземпляр TestClass) для SetUp, Test, TearDown. Тем не менее, результат доказывает, что я ошибаюсь?!

...