7

如果我是正确的,SimpleTest 将允许您断言抛出 PHP 错误。但是,根据文档,我无法弄清楚如何使用它。我想断言我传递给构造函数的对象是MyOtherObject

class Object {
    public function __construct(MyOtherObject $object) {
        //do something with $object
    }
}

//...and in my test I have...
public function testConstruct_ExpectsAnInstanceOfMyOtherObject() {
    $notAnObject = 'foobar';
    $object = new Object($notAnObject);
    $this->expectError($object);
}

我哪里错了?

4

4 回答 4

13

类型提示抛出 E_RECOVERABLE_ERROR,自 PHP 5.2 版起 SimpleTest 可以捕获该错误。以下将捕获包含文本“必须是一个实例”的任何错误。PatternExpectation 的构造函数采用 perl 正则表达式。

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() {
    $notAnObject = 'foobar';
    $this->expectError(new PatternExpectation("/must be an instance of/i"));
    $object = new Object($notAnObject);
}
于 2009-03-18T19:35:41.720 回答
2

PHP 既有错误也有异常,它们的工作方式略有不同。将错误类型传递给类型提示函数将引发异常。你必须在你的测试用例中抓住它。例如。:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() {
  $notAnObject = 'foobar';
  try {
    $object = new Object($notAnObject);
    $this->fail("Expected exception");
  } catch (Exception $ex) {
    $this->pass();
  }
}

或者简单地说:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() {
  $this->expectException();
  $notAnObject = 'foobar';
  $object = new Object($notAnObject);
}

但请注意,这将在发生异常的行之后停止测试。

于 2009-03-04T20:22:01.203 回答
2

事实证明,SimpleTest 实际上并不支持这一点。您无法在 SimpleTest 中发现致命的 PHP 错误。类型提示很棒,但您无法对其进行测试。类型提示会引发致命的 PHP 错误。

于 2009-03-04T22:37:48.523 回答
1

您必须在错误发生之前就预料到错误,然后 SimpleTest 会吞下它并计算通过,如果测试结束并且没有错误,那么它将失败。(对于 PHP(非致命)错误和异常,expectError 和 expectException 的作用相同。)

于 2009-03-04T21:46:07.227 回答