SimpleTest: Bir PHP hata atılır iddia nasıl?

4 Cevap php

Ben doğru isem, SimpleTest bir PHP hatası atılır iddia sağlayacaktır. Ancak, belgelere dayalı, nasıl kullanılacağını anlamaya olamaz. Benim yapıcı içine geçmesine nesne MyOtherObject bir örneği olduğunu iddia etmek istiyorum

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);
}

Nerede yanlış gidiyorum?

4 Cevap

Tür Dayatma PHP sürüm 5.2 beri SimpleTest tarafından yakalanmış olabilir E_RECOVERABLE_ERROR atar. Aşağıdaki metni içeren herhangi bir hata "bir örneği olmalı" çekecektir. PatternExpectation yapıcı bir Perl regex alır.

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() {
    $notAnObject = 'foobar';
    $this->expectError(new PatternExpectation("/must be an instance of/i"));
    $object = new Object($notAnObject);
}

Çıkıyor, SimpleTest aslında bu desteklemiyor. Siz SimpleTest Fatal PHP hataları yakalamak değil. Eğer test edemez dışında Tür Dayatma, harika. Tür Dayatma ölümcül PHP hataları atar.

PHP biraz farklı çalışır hem de hataları ve istisnalar vardır. Bir typehinted işleve bir türü yanlış geçen bir özel çıkaracağız. Sen test halinde olduğunu yakalamak zorundayız. Örn.:

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

veya basitçe:

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

Ama bu durum oluşur satırdan sonra testi durdurmak unutmayın.

Eğer o olur önce hatayı beklemek zorunda sonra SimpleTest onu yutmak ve bir geçiş saymak, deney sonuna kadar alır ve hiçbir hata varsa o zaman başarısız olacaktır. (Aynı şekilde hareket var expectError ve expectException, PHP (ölümcül olmayan) hataları ve İstisnalar, sırasıyla.)