Вы должны заботиться о том, сколько раз вызывалась зависимость во многих случаях.
Например, предположим, что у вас есть служба, которая вставляет некоторые данные в какую-либо базу данных, вызывая веб-службу.
public interface IDataInserter
{
void Insert(Data[] data);
}
И предположим, что в некоторых случаях вам необходимо вставить около 10000 предметов. Но веб-служба не может обрабатывать такой объем данных за один раз. Поэтому вы решили создать декоратор, который будет разбивать данные на несколько кусков и отправлять каждый кусок в один запрос.
public class SplittingDecorator : IDataInserter
{
private readonly IDataInserter m_DataInserter;
public SplittingDecorator(IDataInserter data_inserter)
{
m_DataInserter = data_inserter;
}
public void Insert(Data[] data)
{
var chunks =
data
.Select((d, i) => new {d, i})
.GroupBy(x => x.i/50)
.Select(x => x.Select(y => y.d).ToArray())
.ToList();
foreach (var chunk in chunks)
{
m_DataInserter.Insert(chunk);
}
}
}
Если вы хотите, чтобы проверить SplittingDecorator
класс, вы создадите макет для data_inserter
аргумента конструктора.
В таком тесте, вы должны утверждать, что издевались IDataInserter
был вызван несколько раз X при вызове SplittingDecorator.Insert
с данным размером Y.
Например, если размер данных (длина data
массива) это 160 элементов, вы хотите проверить, что макет был вызван 4 раза.
Да, но какое это указание на самом деле дает вам? Если я смотрю с точки зрения пользователя, вы не знаете, что сделал метод вставки. Вы не знаете, соответствует ли результат. Вы просто знаете, что метод был вызван, но вы этого не сделаете, если он сделал правильную вещь. – Tsahi
Если вы думаете об ответственности этого декоратора, его нужно разбить запрос на несколько кусков. И это именно то, что вы должны проверить. Вы должны проверить, что такой класс разделил бы эти данные на несколько кусков. Вы проверяете, что он вызвал веб-службу X раз. Вам также необходимо проверить, что данные не были потеряны, т. Е. Все 160 элементов данных были частью некоторого запроса службы. –
Обратите внимание, что если этот класс не разбил данные правильно, это означает, что он не выполняет свою работу. Поэтому вы должны проверить это. –