免責事項、私はAndroidで暗号化を行ってきたiOS開発者です。それは私がAndroidで暗号化を達成するのを助けてきましたが、データの暗号化と復号化の単体テストはどうでしょうか?Javaでの暗号化と復号化のユニットテスト
今すぐ頭に浮かぶ最初のアイデアは、のようになります。
String encryptedInputData = encryptedInputData("Hello");
String decryptedData = decryptData(encryptedInputData);
Assert.assertEquals(decryptedData,"Hello");
このテストでは、しかし、1つの欠陥をもたらす何かがencryptedInputData
とdecryptData
方法の変更を行った場合は...、このテストは何を伝えていないだろう変更され、なぜそれが現在壊れているのでしょうか。だから私ははるかに細かいテストを書いてみたいです。たとえば、このコードを与えられたので:
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] data = cipher.doFinal(message);
私はcipher
変数が無いパディングをECBモードでのRSAアルゴリズムを使用していることを確認したいと思います。私は今、私は私がCipher
クラスをモックすることができるだろう想像
に.doFinal(message)
でmessage
等、特定のフォーマットに従うことをテストしたいのですが、ここでの問題が書かれた暗号化と復号化には、働くことがありますUtilクラスとしてのみ、これを単体テストできるようにするためには、私はCipher
というモックをコードに渡す必要があります。これはUtilクラスであると考えられます。つまり、initメソッドを作成する必要があります。 単体テスト目的の場合は、単体テストの場合はセッターメソッドを作成してください。私はコードを単体テストすることができますが、Utilクラスは実際には生産目的では必要のないコードでは厄介です。
このような単体テストシナリオを実行するための優雅な方法はありますか?すなわちencryptedInputData
とdecryptData
はパブリックメソッドですが、これらのメソッドは、単体テストである必要があるさまざまなプライベートメソッドを使用します。