Сохранить объект в отладке, а затем использовать его в качестве заглушки в тестах
Мое приложение подключается к БД и получает дерево категорий отсюда. В режиме отладки я вижу этот большой объект дерева, и я только что подумал о возможности сохранить этот объект где-нибудь на диске для использования в тестовых заглушках. Как это:
mockedDao = mock(MyDao.class);
when(mockedDao.getCategoryTree()).thenReturn(mySavedObject);
Если предположить, mySavedObject
- достаточно велик, поэтому я не хочу генерировать его вручную или писать специальный код генерации. Я просто хочу иметь возможность сериализовать и сохранить его где-нибудь во время сеанса отладки, затем десериализовать его и перейти к thenReturn
в тестах. Есть ли стандартный способ сделать это? Если нет, то как лучше реализовать такой подход?
4 ответа
Мне очень нравится твоя идея, она классная!
Я не знаю библиотеку, которая предложила бы эту функцию из коробки. Вы можете попробовать использовать ObjectOutoutStream
а также ObjectInputStream
(т.е. стандартная сериализация Java), если все ваши объекты реализуют Seriablizable
, Как правило, они этого не делают. В этом случае вам может повезти больше, если вы используете XStream или одного из его друзей.
Мы обычно высмеиваем всю БД по таким сценариям, повторно используя (и неявно тестируя) код для загрузки категорий из БД.
В частности, наши модульные тесты работают с базой данных в памяти ( hsqldb), которую мы инициализируем перед каждым запуском теста путем импорта тестовых данных.
Посмотрите на Dynamic Managed Beans - это предлагает способ изменить значения работающего Java-приложения. Может быть, есть способ определить MBean, который содержит ваше дерево, прочитать дерево, сохранить его где-нибудь и добавить его позже.
Я столкнулся с этой же проблемой и рассмотрел возможные решения. Несколько месяцев назад я написал собственный код для печати большого двоичного объекта в виде строк в шестнадцатеричном коде. Мой метод toJava() возвращает строку, которая является исходным кодом для определения поля требуемого объекта. Это было нетрудно реализовать. Я помещаю операторы журнала, чтобы напечатать результат в файл журнала, а затем вырезать и вставить из файла журнала в тестовый класс. Новые модульные тесты ссылаются на этот файл, что дает мне возможность копаться в операциях с объектом, которые было бы очень сложно построить другим способом.
Это было чрезвычайно полезно, но я быстро достиг предела размера байт-кода в единице компиляции.