Я реализовал класс, который использует несколько различных алгоритмов, которые должны быть взаимозаменяемыми, поэтому я использую интерфейсы.Теперь я хочу протестировать свой класс, но так как я использовал интерфейсы, я не могу создать экземпляры алгоритмов.
Каков наилучший способ проверить класс независимо от интерфейсов?В тесте я хотел бы предположить, что каждый интерфейс ведет себя так, как и должно быть.
Справочная информация:
В настоящее время я работаю надпроект, в котором я должен реализовать криптографическую конструкцию, которая использует несколько криптографических примитивов (таких как подписи, Mac и т. д.).Цель этой реализации состоит в том, чтобы иметь одну общую реализацию, которая не использует никаких конкретных примитивов, а затем создавать экземпляры примитивов, чтобы конструкция действительно работала.
Я реализовал общую конструкцию, используя только интерфейсы.Я использую фабрики, чтобы получить конкретные примитивы, и пока все выглядит хорошо.Но, конечно, мне нужно проверить свой код.
Я немного исследовал, и, к сожалению, я не нашел точного ответа на свой вопрос (возможно, потому что использовал неправильные поисковые запросы).В большинстве случаев люди хотят тестировать интерфейсы или реализацию интерфейса.Но это не относится к моему случаю.
Я читал о Mockito, но большинство примеров просты, когда Mockito моделирует базу данных, и я не знаю, является ли Mockito по-прежнему лучшим способом тестирования в моем случае,особенно если я хочу смоделировать подписи, где я использую асимметричные ключи.Если я использую Mockito, я представляю, что код становится беспорядочным из-за «встроенного» характера объявлений Mockitos.
Применимо ли Mockito (или Mocks в целом) для такого рода испытаний, или я должен реализовать (базовые) реализации моих интерфейсов?
Пример:
Итак, мой «основной» класс имеет набор алгоритмов:
AlgorithmSet algorithmSet;
Этот набор алгоритмов состоит из AlgorithmFactories
HashFactory HashFactory;
SignatureFactory signatureFactory;
SymmetricKeyFactory keyFactory;
В моем «главном»Класс I называет функции алгоритма похожими на это:
Signature signatureScheme = algorithmSet.getSignatureFactory().getSignature();
SignatureKeyPair keyPair = signatureScheme.generateKey();
SignatureOutput signature = signatureScheme.sign(keyPair.getPrivateKey(), message);
Это лишь небольшой пример, который я собрал ради этого вопроса, так что мой реальный код выглядит немного иначе, но это сутьэтого
Signature, SignatureKeyPair, SignatureOutput - это все интерфейсы, потому что в моем «основном» классе мне все равно, кто они, если они выполняют свое предназначение.
Как лучше всего проверить «основной» класс в моем случае? Является ли Mockito по-прежнему лучшим способом?Или лучше сделать базовые реализации всех интерфейсов для улучшения читабельности?Есть около 5 алгоритмов (каждый с Output, Keys и т. Д.).Или есть другой способ, который мне пока не удалось найти?
Я очень ценю любую помощь и спасибо за чтение!