【问题标题】:Extending PHPUnit_Framework_TestCase while using dataProviders在使用 dataProviders 时扩展 PHPUnit_Framework_TestCase
【发布时间】:2013-11-20 23:06:25
【问题描述】:

我对使用 PHPUnit 还很陌生,我正在尝试通过使用数据提供程序来更有效地使用它。在编写普通测试用例时,我可以让数据提供程序工作,但是我发现我正在为多个测试用例重写我的设置代码。所以我试图用一个 BaseTestCase 类来扩展 PHPUnit_Framework_TestCase ,它可以完成我所有的常见设置。如果我在扩展我的 BaseTestCase 类的测试用例中运行简单测试,则此方法有效。但是,在扩展我的 BaseTestCase 类时,我似乎无法使用 @dataProvider。


所以我的设置是:

class BaseTestCase extends PHPUnit_Framework_TestCase{
     public static function setUpBeforeClass(){
           //do setup
           //this is getting called and it works
     }
}

class myTest extends BaseTestCase{
     public function myBasicTest(){
           //this works
           $this->assertEquals(2, 1+1);
     }

     public function myProvider(){
           return [
               [1,1,2],
               [1,2,3],
               [1,4,5],
           ]
     }

     /**
      * @dataProvider myProvider
      */
     public function testMyProvider($a, $b, $result){
           //this doesn't work, the provider never gets called
           //this would normally work if I extended PHPUnit_Framework_TestCase
           $this->assertEquals($result, $a+$b);
     }
}

我知道提供程序会在任何设置之前运行,所以我想知道 PHPUnit 是否因为继承而不知道提供程序存在。无论哪种方式,有谁知道我正在尝试做的事情是否可以通过这种方式进行,或者 PHPUnit 是否有另一种方式来适应这些类型的情况?

感谢您的帮助,

约旦

【问题讨论】:

  • 事实证明这不是问题。请参阅下面的答案。

标签: unit-testing phpunit dataprovider extending


【解决方案1】:

您的测试函数不是以单词“test”开头的。

public function test_myProviderTest($a, $b, $result){

【讨论】:

  • 是的。这不是我的实际代码。这是我制作示例时的疏忽。我的实际代码尝试运行测试,但找不到提供程序。
  • 我没有看到您的代码有问题,所以我认为这可能是您怀疑的 PHPUnit 和继承的问题。我使用相同的代码,除了静态函数(根据手册),但在不继承时使用相同的基本代码。
【解决方案2】:

这实际上不是问题。我的测试文件中的构造函数设置不正确。一个非常令人沮丧的疏忽。

【讨论】:

  • “不正确的构造函数”是什么意思?我刚刚遇到了确切的问题。我已经定义了一个构造函数,但它调用了parent::construct 那么还有什么问题呢?
猜你喜欢
  • 2018-06-05
  • 2012-03-14
  • 2015-03-22
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
相关资源
最近更新 更多