Статический фабричный класс вводит связь между вашим классом и HeightBounds
классом. это может затруднить тестирование вашего класса, если, например, HeightBounds
отключается и ищет информацию в БД или читает из веб-службы и т. д. и т. д.
Если вместо этого вы внедрили реализацию IHeightBounds
в свой класс, вы можете смоделировать это, чтобы проверить, что происходит, когда зависимости вашего класса делают определенные вещи.
Например, что если HeightBounds
выдает исключение? или возвращает ноль? Или вы хотите проверить, когда возвращается конкретный HeightBound
? С интерфейсом легко смоделировать это поведение, со статической фабрикой это сложнее, так как у вас есть данные для создания желаемых результатов в классе.
У вас все еще может быть только одна реализация HeightBounds
, и вы сможете протестировать ее изолированно, но вы сможете протестировать свой метод выше, даже не имея реальной реализации.
Я бы, вероятно, имел бы интерфейс IHeightBoundFactory
и внедрил бы реализацию в класс.
Что касается тестирования рядовых, как правило, вы не хотите. Вы хотите протестировать одно из двух: либо то, что вы ожидали, либо то, что вы ожидали.
Если у вас есть метод с именем Add
и метод с именем GetAll
, вы можете проверить, что при вызове Add
и последующем вызове GetAll
вы получите тот, который вы добавили. вам все равно, как это реализовано, только то, что это работает. это проверка результатов. Обычно в этой ситуации вы хотите создать фиктивные объекты, которые возвращают данные. Это похоже на вашу ситуацию.
Если при вызове Add
вы ожидаете, что добавляемое записывается в журнал, вы хотите протестировать взаимодействия с зависимостью журналирования, поэтому вы вводите фиктивную зависимость и проверяете, что взаимодействие с этим классом происходило при вызове Add
. Как правило, в этой ситуации вы хотите создать фиктивные объекты с установленными ожиданиями и убедиться, что эти ожидания были удовлетворены. Не похоже, что это необходимо в ситуации, которую вы описали выше.