Если вы хотите достичь полной независимости и изоляции , то вам, скорее всего, придется раскрыть некоторые внутренние элементы MyHashTable
.Например, базовая коллекция, в которую Add
добавляет элементы:
public class MyHashTable<TKey, TValue>
{
internal Dictionary<TKey, TValue> Storage { get; set; }
// ...
}
Это не очень красиво, как вы можете видеть, но, как я сказал, невозможно протестировать эти два метода в полной изоляции без разоблачение чего-либо (как вы заметили, это метод pair ).Вы можете предоставить другие способы инициализации вашего класса, например.с конструктором, принимающим коллекцию, но он только делегирует проблему на один шаг дальше - вам нужно проверить, что конструктор также работает, и вам, вероятно, понадобится метод Get
для этого ... который возвращает вас к исходной проблеме.
Редактировать:
Обратите внимание, что я не предлагаю раскрывать внутренние детали / детали реализации в качестве единственного пути для подражания.Вы можете просто протестировать эти методы вместе (не как в одном тесте, а один, использующий другой), что может оказаться лучшим решением.Конечно, если ваш Add
в какой-то момент не пройдёт, тесты Get
тоже не пройдут.Но опять же, вы хотите исправить сломанный Add
- как только это будет сделано, все вернется к норме.Естественно, проблема заключается в том, как вы различаете, был ли сломан Add
или Get
, но именно здесь пригодятся сообщения о сбое правильного утверждения или концепция защитных утверждений, которые я связал в комментарии.
Правда в том, что иногда полное разделение и изоляция слишком трудны для достижения, или вам просто нужно ввести плохой дизайн.Это одна из причин, по которой они никогда не должны быть конечной целью.