У меня была ситуация, когда я использовал настраиваемый десериализатор, но я хотел, чтобы стандартный десериализатор выполнял большую часть работы, а затем, используя SAME json, выполнял некоторые дополнительные настраиваемые действия. Однако после того, как десериализатор по умолчанию выполнил свою работу, текущее местоположение объекта JsonParser вышло за рамки необходимого мне текста json. Поэтому у меня возникла та же проблема, что и у вас: как получить доступ к базовой строке json.
Вы можете использовать JsonParser.getCurrentLocation.getSourceRef()
, чтобы получить доступ к исходному источнику json. Используйте JsonParser.getCurrentLocation().getCharOffset()
, чтобы найти текущее местоположение в источнике json.
Вот решение, которое я использовал:
public class WalkStepDeserializer extends StdDeserializer implements
ResolvableDeserializer {
// constructor, logger, and ResolvableDeserializer methods not shown
@Override
public MyObj deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
JsonProcessingException {
MyObj myObj = null;
JsonLocation startLocation = jp.getCurrentLocation();
long charOffsetStart = startLocation.getCharOffset();
try {
myObj = (MyObj) defaultDeserializer.deserialize(jp, ctxt);
} catch (UnrecognizedPropertyException e) {
logger.info(e.getMessage());
}
JsonLocation endLocation = jp.getCurrentLocation();
long charOffsetEnd = endLocation.getCharOffset();
String jsonSubString = endLocation.getSourceRef().toString().substring((int)charOffsetStart - 1, (int)charOffsetEnd);
logger.info(strWalkStep);
// Special logic - use JsonLocation.getSourceRef() to get and use the entire Json
// string for further processing
return myObj;
}
}
И информация об использовании десериализатора по умолчанию в пользовательском десериализаторе находится в . Как мне вызвать десериализатор по умолчанию из пользовательского десериализатора в Джексоне
Team System, вероятно, наиболее известное решение, но вы также можете попробовать TSQLUnit (SourceForge).
Я сам не использовал его, но эта статья достойно представляет его.
Касса http://www.sqlservercentral.com/articles/Testing/66553/ и http://www.sqlservercentral.com/articles/Database+Design/66845/
Это довольно грубая статья о том, как делать все в рамках T-SQL.
Вы думали об использовании NHibernate и использовании TestDriven или аналогичный только для тестов?
В проектах, где у меня не было доступа к командной системе для db pro, я использовал сценарии sql в сочетании с msbuild и библиотекой задач sdc для msbuild ( http: // www .codeplex.com / sdctasks ). Скрипт msbuild вызывает задачу sdc для запуска моих скриптов sql в определенном порядке (например, создание базы данных, создание таблиц и т. Д.) И в определенной строке подключения. Скрипты всегда проверяют, существует ли объект, и сначала выполняют его разборку, а затем создают резервную копию.
Скрипты sql и msbuild я помещаю в обычный проект базы данных Visual Studio (который не делает ничего особенного, поэтому вы можете использовать простой пустой project), поэтому все контролируется исходным кодом.
с таким набором сценариев вы можете настроить новую базу данных для каждого запуска теста.
Мне удалось адекватно применить стиль разработки, управляемый тестированием, к базам данных SQL Server. с использованием TSQLUnit . Я последовал той же схеме, что и вы, при написании сначала отказавшего sproc модульного теста, а затем внесения изменений, необходимых для прохождения теста. Со временем я также создал набор тестов, когда их выполнение проверяло, что ничего не сломалось, при внесении каких-либо новых изменений.
Были некоторые трудные моменты (включая крайние трудности при написании тестов для существующих sprocs), но это работало особенно при изменении схемы. Однако я бы порекомендовал посмотреть T.S.T. T-SQL Test Too1 , который, в отличие от TSQLUnit (, мне пришлось использовать собственный ), имеет встроенную поддержку утверждений.