当前位置: 首页 > 知识库问答 >
问题:

PHP、phpunit和dbunit-如果覆盖了setUp和tearDown,则不会调用getConnection和getDataSet

韦知
2023-03-14

我正在使用一个现有的phpunit测试套件,并尝试合并dbunit。特别是,我想使用数据集抽象来加载夹具数据并在我之后进行清理。我已经在测试用例中添加了PHPUnit_扩展_数据库_TestCase_Trait特征,并实现了函数getConnection和getDataSet。但是,这些方法只能由trait的默认setUp和tearDown方法调用。我的许多测试都定义了自己的设置和拆卸方法。我是否应该将这个现有的安装/拆卸代码放在不同的地方,这样我就不必重写这个特性的安装和拆卸?参考代码:

  class FooTest extends \PHPUnit_Framework_TestCase {

    use PHPUnit_Extensions_Database_TestCase_Trait;

    static private $pdo = null;
    private $conn = null;

    public function testTrueIsTrue() {
      $foo = true;
      $this->assertTrue($foo);
    }

    public function setUp() {
      error_log("in setUp");
    }

    public function tearDown() {
      error_log("in tearDown");
    }

    public function getConnection() {
      error_log("in getConnection");
      return $this->createDefaultDBConnection();
    }

    /**
     * @return PHPUnit_Extensions_Database_DataSet_IDataSet
     */
    public function getDataSet() {
      error_log("in getDataSet");
      return new PHPUnit_Extensions_Database_DataSet_DefaultDataSet();
    }
  }

共有1个答案

晋越彬
2023-03-14

这是一个特殊的例子:

如何重写trait函数并从重写函数中调用它?

因此,我修改了我的use语句:

use PHPUnit_Extensions_Database_TestCase_Trait {
  setUp as protected defaultSetUp;
  tearDown as protected defaultTearDown;
}

并将调用添加到默认方法:

public function setUp() {
  $this->defaultSetUp();
  error_log("in setUp");
}

public function tearDown() {
  error_log("in tearDown");
  $this->defaultTearDown();
}
 类似资料:
  • 问题内容: 我碰到的SO这个线程,其讲述PHP代码覆盖工具-代码覆盖工具对PHP 我从未从事过PHP,并且一直在使用Java针对用PHP编写的应用程序编写Selenium UI测试。当我经过上面提到的线程时,我感到(可能是错误的)当那些用PHP Unit编写的单元测试并且想要找出单元测试覆盖应用程序的程度时,将使用那些PHP代码覆盖工具。 我正在寻找一种解决方案,在其中执行我编写的,用Java编写

  • 写测试的时候你经常需要在运行测试前做一些准备工作,和在运行测试后进行一些整理工作。 Jest 提供辅助函数来处理这个问题。 为多次测试重复设置 如果你有一些要为多次测试重复设置的工作,你可以使用 beforeEach 和 afterEach。 例如,我们考虑一些与城市信息数据库进行交互的测试。 你必须在每个测试之前调用方法 initializeCityDatabase() ,同时必须在每个测试后,

  • 问题内容: 我经常对CSS覆盖规则感到困惑:总的来说,我意识到更具体的样式表会覆盖不太具体的样式表,而具体性取决于指定了多少个选择器。还有一个关键字,它也起作用。 因此,这是一个简单的示例:我有一个带有两个表单元格的表。表格本身具有CSS规则,适用于表格中的所有单元格。但是,第二个表单元格具有自己的规则,该规则应覆盖常规表规则: 但是…当我在浏览器中打开它时,我看到它没有被覆盖。好的- 我想我需要

  • 我在为自定义员工类实现hashmap时有问题。 > 我只重写了employee类的。所以,对于相同的对象,我得到相同的hashcode值。如果我不重写equals(),那就没问题了,对吧?因为object类的)比较了引用(在这里,我得到了相同的引用来表示相等的对象)。无论如何,根据我的逻辑,我永远不会为不同的emp对象得到相同的哈希值。所以,让

  • 问题内容: 我有一个具有通用方法的抽象类,并且我想通过用特定类型代替通用参数来覆盖通用方法。所以在伪代码中,我有以下内容: 但是由于某种原因,我不允许这样做?我是在犯某种语法错误还是不允许这种继承和覆盖?具体来说,由于eclipse IDE不断提醒我要实现,我遇到了一个错误。 这就是我希望上面的代码起作用的方式。在我的代码的其他地方,有一个方法可以期望实现对象的实例,这具体意味着它们具有我可以使用

  • 我试图将Spring应用程序(大部分)转换为Spring Boot应用程序。在应用程序中,我有一个HTTP基本过滤器,收集用户名和密码,然后在DataSource实现中作为变量传递。 在这个数据源中,getConnection()方法是这样的: (由于StackOverflow格式问题,\n作为新行) 在Spring中,我可以毫无问题地实现@autowiledPrivate DataSource