如何 运行 测试带和不带常量?
How to run tests with and without constants?
我创建了一个小型库,要求用户设置一个秘密常量才能运行。
这是我的部分代码:
if (!defined('SOMELIB_SECRET')) {
throw new RuntimeException('You need to define the constant SOMELIB_SECRET to use this library');
}
这段代码效果很好,但我不知道如何测试抛出的异常。如果我在 phpunit.xml:
中创建常量,我可以测试所有内容
<php>
<const name="SOMELIB_SECRET" value="ThisIsTheSecretForTests" />
</php>
如果我不在PHP中添加常量,我可以测试异常。
我想做的是测试两者,我需要一种方法来取消中间常量的设置,这不是真正的事情(事实证明常量是......常量)。
我试图创建 2 个测试文件:001_SomeLibWithoutSecretTest.php
和 002_SomeLibWithSecretTest.php
,以便我可以在它们之间创建常量。它在 Linux 上有效,但现在我正在使用 Windows,测试以相反的方式调用。此外,它有点 hacky:tests should not have to be called in a given order.
介绍了这么多之后,这是我的简单问题:
如何使用 PHPUnit 进行 运行 测试,为某些测试定义常量而不是为所有测试定义常量?
这里有一些想法:
启用进程隔离
启用 processIsolation
后,每个测试都将 运行 在一个独立的进程中。您必须从配置中删除您的常量并在 setUp
、setUpBeforeClass
或直接在您需要它的测试中定义它。
运行套件扩展
运行kit pecl 扩展有一个 function 来删除一个已经定义的常量。不过,您的测试将取决于该扩展名,这不是很好。
把它移到别处
当您测试的主题不依赖于全局变量时通常是最好的。将秘密移至配置对象使测试更容易,用户更难忘记配置所需的设置。
我创建了一个小型库,要求用户设置一个秘密常量才能运行。
这是我的部分代码:
if (!defined('SOMELIB_SECRET')) {
throw new RuntimeException('You need to define the constant SOMELIB_SECRET to use this library');
}
这段代码效果很好,但我不知道如何测试抛出的异常。如果我在 phpunit.xml:
中创建常量,我可以测试所有内容<php>
<const name="SOMELIB_SECRET" value="ThisIsTheSecretForTests" />
</php>
如果我不在PHP中添加常量,我可以测试异常。
我想做的是测试两者,我需要一种方法来取消中间常量的设置,这不是真正的事情(事实证明常量是......常量)。
我试图创建 2 个测试文件:001_SomeLibWithoutSecretTest.php
和 002_SomeLibWithSecretTest.php
,以便我可以在它们之间创建常量。它在 Linux 上有效,但现在我正在使用 Windows,测试以相反的方式调用。此外,它有点 hacky:tests should not have to be called in a given order.
介绍了这么多之后,这是我的简单问题:
如何使用 PHPUnit 进行 运行 测试,为某些测试定义常量而不是为所有测试定义常量?
这里有一些想法:
启用进程隔离
启用processIsolation
后,每个测试都将 运行 在一个独立的进程中。您必须从配置中删除您的常量并在setUp
、setUpBeforeClass
或直接在您需要它的测试中定义它。运行套件扩展
运行kit pecl 扩展有一个 function 来删除一个已经定义的常量。不过,您的测试将取决于该扩展名,这不是很好。把它移到别处
当您测试的主题不依赖于全局变量时通常是最好的。将秘密移至配置对象使测试更容易,用户更难忘记配置所需的设置。