单元测试使用位于不同代码库中的一些盐加密/解密

时间:2017-09-13 22:44:10

标签: java unit-testing encryption jce

首先,我要提到我看过Unit testing of encrypt/decryptUnit testing encryption and decryption in Java

我想通过验证其许可证来保护图书馆。许可证包含最大用户和到期时间等信息。

我遇到的问题是:

  • 加密器和解密器有两个不同的代码库。解密器与库一起打包,但加密器不是,因此很难将它们放在同一个测试套件中!
  • 在加密器中使用随机盐,因此即使使用相同的输入,加密器每次都会产生不同的输出,我再也无法对结果做出断言。
  • 为了它的目的,解密器(使其更难为它注入另一个类)是一个final类,它的所有方法都是私有的,除了一些包可访问的入口点。

我不想测试JCE,但我想测试我的代码:

  • 从加密许可证中提取盐,
  • 解密加密的许可证,
  • 将输出反序列化为包含许可证数据的某些数据结构

我应该创建一个代码的克隆,有一些更软的访问限制并测试吗?然后问题是我没有测试在客户端系统上运行的真实代码。

有没有更好的解决方案呢?

1 个答案:

答案 0 :(得分:0)

根据您的描述,我没有看到单独测试它们的问题。

  
      
  • 加密器和解密器有两个不同的代码库。
  •   

如果您单独测试它们不是问题。

  
      
  • 在加密器
  • 中使用随机盐   

您可以注入一个模拟随机生成器,它将产生相同的结果。

  
      
  • 为了它的目的,解密器是一个最终类,它的所有方法都是私有的
  •   

可以看到许多测试私有方法的方法here

  
      
  • 从加密许可证中提取盐
  •   

您需要的只是一个加密的许可证,您知道它的盐。

  
      
  • 解密加密许可证
  •   

同样,您可以使用您知道其解密内容的许可证。

  
      
  • 将输出反序列化为包含许可证数据的某些数据结构
  •   

不相关,是对反序列化代码的单独测试。