Отказ от ответственности, я разработчик iOS, который работает с шифрованием на Android. Как бы то ни было, мне удалось добиться шифрования в Android, но я спрашиваю себя, как один модульный тест для шифрования и дешифрования данных?Модульное тестирование шифрования и дешифрования в Java
Теперь первая мысль, которая приходит на ум, будет что-то вроде:
String encryptedInputData = encryptedInputData("Hello");
String decryptedData = decryptData(encryptedInputData);
Assert.assertEquals(decryptedData,"Hello");
Этот тест, однако позах один недостаток ... Если что-то сделал изменения в encryptedInputData
и decryptData
методов, этот тест будет не говорит, что изменилось и почему оно сейчас ломается. Поэтому я хотел бы написать гораздо более подробные тесты. Так, например, учитывая этот код:
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] data = cipher.doFinal(message);
Я хотел бы, чтобы убедиться, что переменная cipher
использует алгоритм RSA в режиме ECB без заполнения. Я хотел бы, чтобы проверить, что message
в .doFinal(message)
следует определенный формат и т.д.
Теперь я предположил бы, что я смог бы дразнить Cipher
класс, проблема здесь заключается в том, что шифрование и дешифрование, что было написано, служит только в качестве класса Util и для того, чтобы иметь возможность тестировать это, мне нужно было бы передать код Cipher
в код, который, учитывая, что это класс Util, кажется, что он будет запутанным, т.е. мне пришлось бы либо создать метод init только для целей единичного тестирования или создания методов настройки, чтобы проверить это. Который позволил бы мне модулировать код, но тогда класс Util становится неуклюжим с кодом, который мне действительно не нужен для производственных целей.
Есть ли какие-либо изящные способы модуляции тестовых сценариев, подобных этому? то есть encryptedInputData
и decryptData
являются общедоступными методами, но эти методы используют различные частные методы, которые, откровенно говоря, должны быть проверены на единицу, проблема тогда в том, как?