Я нахожу, что когда мне нужны сотни интерфейсов в моем проекте для изоляции зависимостей, я обнаруживаю, что в моем проекте может быть проблема.Это особенно актуально, когда многие из этих интерфейсов имеют только один метод.Альтернатива этому - заставить ваши объекты вызывать события, а затем связывать ваши зависимости с этими событиями.Например, предположим, что вы хотите удалить свои данные.Один из вполне разумных способов сделать это - сделать следующее:
public interface IDataPersistor
{
void PersistData(Data data);
}
public class Foo
{
private IDataPersistor Persistor { get; set; }
public Foo(IDataPersistor persistor)
{
Persistor = persistor;
}
// somewhere in the implementation we call Persistor.PersistData(data);
}
Еще один способ сделать это без использования интерфейсов или макетов - это сделать:
public class Foo
{
public event EventHandler<PersistDataEventArgs> OnPersistData;
// somewhere in the implementation we call OnPersistData(this, new PersistDataEventArgs(data))
}
ЗатемВ нашем тесте вы можете вместо создания макета сделать следующее:
Foo foo = new Foo();
foo.OnPersistData += (sender, e) => { // do what your mock would do here };
// finish your test
Я считаю, что это чище, чем чрезмерное использование макетов.