基境共享
最后更新于:2022-04-01 03:44:51
# 基境共享
有几个好的理由来在测试之间共享基境,但是大部分情况下,在测试之间共享基境的需求都源于某个未解决的设计问题。
一个有实际意义的多测试间共享基境的例子是数据库连接:只登录数据库一次,然后重用此连接,而不是每个测试都建立一个新的数据库连接。这样能加快测试的运行。
[Example 4.3, “在同一个测试套件内的不同测试之间共享基境”](# "Example 4.3. 在同一个测试套件内的不同测试之间共享基境")用 `setUpBeforeClass()` 和 `tearDownAfterClass()` 模板方法来分别在测试用例类的第一个测试之前和最后一个测试之后连接与断开数据库。
**Example 4.3. 在同一个测试套件内的不同测试之间共享基境**
~~~
<?php
class DatabaseTest extends PHPUnit_Framework_TestCase
{
protected static $dbh;
public static function setUpBeforeClass()
{
self::$dbh = new PDO('sqlite::memory:');
}
public static function tearDownAfterClass()
{
self::$dbh = NULL;
}
}
?>
~~~
需要反复强调的是:在测试之间共享基境会降低测试的价值。潜在的设计问题是对象之间并非松散耦合。如果解决掉潜在的设计问题并使用桩件(stub)(参见[Chapter 9, *测试替身*](# "Chapter 9. 测试替身"))来编写测试,就能达成更好的结果,而不是在测试之间产生运行时依赖并错过改进设计的机会。