Мы unit test большую часть нашей бизнес-логики, но зациклились на том, как лучше всего проверить некоторые из наших больших задач обслуживания и процедур импорта/экспорта. Например, рассмотрите экспорт данных платежной ведомости из одной системы в стороннюю систему. Чтобы экспортировать данные в формате, который требуется компании, нам нужно нажать ~ 40 таблиц, что создает ситуацию кошмара для создания тестовых данных и издевательства над зависимостями.
Например, рассмотрим следующее (подмножество ~ 3500 строк экспортного кода):
public void ExportPaychecks()
{
var pays = _pays.GetPaysForCurrentDate();
foreach (PayObject pay in pays)
{
WriteHeaderRow(pay);
if (pay.IsFirstCheck)
{
WriteDetailRowType1(pay);
}
}
}
private void WriteHeaderRow(PayObject pay)
{
//do lots more stuff
}
private void WriteDetailRowType1(PayObject pay)
{
//do lots more stuff
}
У нас есть только один открытый метод в этом конкретном классе экспорта - ExportPaychecks(). Это действительно единственное действие, которое имеет смысл для кого-то, называющего этот класс... все остальное является частным (~ 80 частных функций). Мы могли бы сделать их общедоступными для тестирования, но тогда нам нужно будет издеваться над ними, чтобы протестировать их отдельно (т.е. Вы не можете протестировать ExportPaychecks в вакууме, не издеваясь над функцией WriteHeaderRow. Это тоже огромная боль.
Поскольку это единый экспорт, для одного поставщика движущая логика в домене не имеет смысла. Логика не имеет значения домена вне этого конкретного класса. В качестве теста мы построили модульные тесты, которые имели почти 100% -ный охват кода... но для этого требовалось безумное количество тестовых данных, введенных в объекты-заглушки/макеты, плюс более 7000 строк кода из-за укусов/издевательства над нашими многими зависимостями,
Как производитель программного обеспечения HRIS, у нас есть сотни экспорта и импорта. Другие компании ДЕЙСТВИТЕЛЬНО unit test этот тип вещей? Если да, есть ли ярлыки, чтобы сделать его менее болезненным? Я наполовину соблазнился сказать "ни одного модуля, проверяющего процедуры импорта/экспорта", и просто повторить интеграционное тестирование позже.
Обновить - спасибо за ответы. Одна вещь, которую мне бы хотелось увидеть, - это пример, так как я все еще не вижу, как кто-то может превратить что-то вроде большого экспорта файлов в легко проверяемый блок кода, не превращая код в беспорядок.