我实现了一个名为Enigma
的非常简单的类,它有一个对称密钥和两个方法:byte[] encryptString(String strToEncrypt)
和String decryptBytes(byte[] arrayToDecrypt)
。
我正在尝试为这些方法编写一些测试。我曾考虑过测试加密和解密方法是彼此相反的,但是它们并没有单独说明每一个。我想现在使用这些方法来获取一组输入 - 输出并将其设置为测试(我知道这不是理想的,但这些测试的目的是保证函数在将来的行为表现如此今天,不是加密/解密好)。
但是,我不知道如何获得byte[] encryptString(String strToEncrypt)
输出的字节数组的表示,以便我可以在测试类中对其进行硬编码。
有什么想法吗?
答案 0 :(得分:4)
关于如何测试的一些注释(个人意见警告:-))
我的最后一点是给我(最后?)推荐。想想班级的责任是什么(希望是单一的责任,见SRP)。在这种情况下,我认为你班级的责任是对字符串进行双向加密 因此,我会写下面的测试:
@Test
public void testThatEncryptingStringResultsInExpectedBytes() {
byte[] encryption = enigma.encryptString(TEST_STRING);
assertArrayEquals(EXPECTED_ENCRYPTION, encryption);
}
@Test
public void testThatDecryptinEncryptionResultsInOriginalString() {
String decryption = enigma.decryptBytes(TEST_ENCRYPTION);
assertEquals(EXPECTED_ORIGINAL_STRING, decryption);
}
@Test
public void testThatDecriptionReversesEncryption() {
String decryption = enigma.decryptBytes(enigma.encryptString(TEST_STRING));
assertEquals(TEST_STRING, decryption);
}
@Test
public void testThatEncryptionReversesDecryption() {
byte[] encryption = enigma.encriptString(enigma.decryptBytes(TEST_ENCRYPTION));
assertEquals(TEST_ENCRYPTION, encryption);
}
也许添加一些测试来检查尝试加密/解密无效值会引发异常和其他错误情况。