phpunit在测试中设置一些默认配置值的最佳做法是什么?
我正在考虑像这样的价值观
通常情况下,我会使用构造函数或一些setter来设置它,但是当我只有这样的类时我不知道该怎么做
class RestTest extends PHPUnit_Framework_TestCase {
例如,我正在尝试为REST和SOAP服务创建测试用例。
我需要指定url / user并传递但是它们会在dev / test / production上更改,所以我需要一种干净的方式来指定它们。
答案 0 :(得分:4)
如果您在测试的每个测试用例中都有一些默认值,例如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));
}
}
如果您有一组需要输入一个测试方法的值,请使用@SilverLight(+1)建议的DataProviders。
如果您需要某种环境设置(无论您想要做什么,我现在只使用用户名,因为我无法猜测)您可以在PHPUnit Bootstrap
(或者文件传递给--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"; }
}
并且可能有自己的基础Testclass
<?php
class MyBaseTest extends PHPUnit_Framework_TestCase {
public function setUp() {
parent::setUp();
$this->config = new MyPHPUnitConfig();
}
}
并从中延伸。或者使用setUpBeforeClass
仅对每个测试类执行一次。
如果这不能回答你的问题我就是不知道你在想什么。它是一个测试用例,它没有任何强大的依赖关系,并且它kinda shouldn't have any (Isolation)
我不猜你的问题是如何将值输入你的setUp函数呢? (因为那不是一个phpunit问题)。
如果有帮助,请告诉我
答案 1 :(得分:3)
我认为您正在寻找data providers:
<?php
class DataTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}
public function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
array(1, 1, 3)
);
}
}
?>
数据提供者可以包含任何类型的信息,包括用户名,客户端ID等。