如何在我的代码中测试 gnupg 集成?

问题描述 投票:0回答:1

我收到了一个包装 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);
    }
php integration-testing gnupg
1个回答
0
投票

请记住,您在这里不是测试 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);
© www.soinside.com 2019 - 2024. All rights reserved.