dan*_*car 3 php phpunit unit-testing
phpunit 在测试中设置一些默认配置值的最佳实践是什么?
我正在考虑类似的价值观
通常我会使用构造函数或一些设置器来设置它,但当我只有这样的类时我不知道如何做到这一点
class RestTest extends PHPUnit_Framework_TestCase {
Run Code Online (Sandbox Code Playgroud)
例如,我正在尝试为 REST 和 SOAP 服务制作测试用例。
我需要指定 url/用户并通过,但它们在开发/测试/生产时发生变化,因此我需要一种干净的方法来指定它们。
如果您在测试的每个测试用例中都需要一些默认值(例如 UserId),我建议您在setUp类的方法中设置这些值。
只是设置值的示例:
class MtTest extends PHPUnit_Framework_TestCase {
// As a property
private $testUser = 7;
// In the setUp
public function setUp() {
$this->testUser = 7;
$this->defaultName = "BOB";
$this->MtClass = new Mt();
}
public function testFoo() {
$this->assertTrue($this->MtClass->userExists($this->testUser));
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要将一组值输入到一个测试方法中,请使用建议的 @SilverLight (+1) 等 DataProvider。
如果您需要某种环境设置(对于您想要执行的任何操作,我现在只使用用户名,因为我无法猜测)您可以在您的PHPUnit Bootstrap(或您传递给 --bootstrap 的文件)中设置它们:
引导程序.php
<?php
define("PHPUnit_Username", "Fuuu");
// or
$phpunitConfig = new Array(
"username" => "fuu",
)
// or whatever suits you there. No reason for me to type a config object i guess
class MyPHPUnitConfig {
public function getUsername() { return "wtf"; }
}
Run Code Online (Sandbox Code Playgroud)
也许有你自己的基础测试类
<?php
class MyBaseTest extends PHPUnit_Framework_TestCase {
public function setUp() {
parent::setUp();
$this->config = new MyPHPUnitConfig();
}
}
Run Code Online (Sandbox Code Playgroud)
并以此为基础延伸。或者setUpBeforeClass每个测试类只执行一次。
如果这不能回答你的问题,我只是不明白你的意思。这是一个测试用例,它没有任何强依赖性,而且kinda shouldn't have any (Isolation)我不认为您的问题是如何将值放入您的 setUp 函数中,是吗?(因为这不是 phpunit 问题)。
让我知道这是否有帮助