Здравствуйте, Ceceron, Вы писали:
C>— "тестировать только через интерфейс ( через паблик методы )"
C>Не согласен, тестирование через интерфейс — это фактически тестирование черного ящика и никак не юнит тестирование
а зачем вообще тогда отделять интерфейс от реализации?
если писать тесты для всех приватных методов, да еще проверять состояние приватных членов, то мало того что времени (объем кода) в юнит тестах будет больше самого кода — главное что это смешает разные уровни процесса.
-------------
давай на примерах, вот мой:
в САД есть класс — HrenovinaStorage
его Responsibilities — постоянное хранение объектов типа Hrenovina,
средства добавления / удаления / получения объекта по ключу
соотв. у него есть след. методы
public void Start();
public void Stop();
public void Add( Hrenovina hrn );
public void Remove( string key );
public void Clear();
public Hrenovina Get( string key );
теперь пишем простой тест:
HrenovinaStorage storage = new HrenovinaStorage( TmpName );
storage.Start();
storage.Clear(); // сразу все чистим
storage.Add( new Hrenovina( key ) ); // добавляем новый объект
storage.Get( key ); // проверяем добавил или нет
storage.Remove( key ); // ...
storage.Get( key ); // ...
// теперь проверяем как он перманентно хранит объекты
storage.Add( new Hrenovina( key2 ) );
storage.Add( new Hrenovina( key3 ) );
storage.Stop();
storage = null;
HrenovinaStorage storage = new HrenovinaStorage( TmpName );
storage.Start();
storage.Get( key2 ); // проверяем сохранил или нет
storage.Get( key3 );
// -------------------
все, если тесты срабатывают, значит класс делает то, что должен
теперь покажи где здесь место для проверки приватных методов и полей? ( а они таки есть ).