我收到了一个包装 gnupg 的可用 PHP 类。我们用它来处理 gpg 加密和解密。现在我必须用 PHPUnit 来测试它。 gpg 的本质是它永远不会返回两个相同的结果。
我应该如何测试它是否真的有效?
这大致是我尝试过的,但显然它不起作用:
public function testExample(): void
{
$originalMessageFixture = $this->fixturesDisk->get('pgp/decrypted-message');
$expectedEncryptedMessage = $this->fixturesDisk->get('pgp/encrypted-message');
$encryptedMessage = (new PgpWrapper())->encrypt($originalMessageFixture);
self::assertSame($expectedEncryptedMessage, $encryptedMessage);
}
请记住,您在这里不是测试 GPG,而是测试包装器。您不应该断言该过程应用任何类型的加密强度。您只需要知道加密过程会更改输入,并且解密过程会返回您开始时的内容。
也就是说,您不需要从已知的静态文本块开始。因此,只需生成一些随机输入作为源文本即可。也许是这样的:
$source = base64_encode(random_bytes(1024));
或者:
$source = \Faker\Factory::create()->paragraph();
然后使用您的类来加密该源,并断言您返回的内容与您提供的内容不同:
$encrypted = (new PgpWrapper())->encrypt($source);
self::assertNotSame($source, $encrypted); // or whatever this method is called
然后使用您的类来解密该加密消息,并断言您返回的内容与源相同:
$decrypted = (new PgpWrapper())->decrypt($encrypted);
self::assertSame($decrypted, $source);