PHP ve SimpleTest - çalışan tearDown () ölümcül bir istisna var olsa bile

2 Cevap php

Bir arama ölümcül durumları yakalamak üzerine birkaç soru verir, ama bu bir SimpleTest kullanarak özgüdür. (Ben SimpleTest güncel olduğunu biliyorum, ama benim yapılandırma üzerinde çalışmak için PHP-Unit almak başka bir soru).

Ben tearDown () yöntemi Ben kurulum sırasında veritabanında bazı test satırları oluşturmak gibi ölümcül bir istisna olduğunda bile çalışır ve gözyaşı aşağı sırasında bunları kaldırmak için almaya çalışıyorum. SimpleTest ölümcül bir istisna söz konusu olduğunda ancak, teardown () koştu asla.

Ölümcül exeception rağmen çalıştırmak için tearDown () almak için bir yolu var mı?

2 Cevap

Kullanılabilecek bir "register_shutdown_fuction" kanca bulunmaktadır:

register_shutdown_function(array($this, 'shutdownHandler'));

"ShutdownHandler" sen yazabilirsiniz:

error_get_last() && $this->tearDown();

Bir Ölümcül Hata oluştuğunda, PHP işlem sonlandırılır - artık orada olduğu gibi aynı PHP süreç, addionnal kod her türlü idam olduğu için hiçbir yolu yoktur anlamına gelir.

Bu da demek olur:

  • muhtemelen çok raporlama elde değil edeceğiz
  • Fatal Error biter biri sonra diğer testler çalışmayacak
  • Kötü - Sen başarısız bir test var.


You should fix the problem : a Fatal Error in your application is bad ; it's great that you detected it with your automated tests, of course -- but the next step is to make it go away ;-)


As you cannot run anymore PHP code in the same process that has died, the only solution I see would be to launch another process, to run your clean-up code.

: Temel fikir olacaktır

  • Sizin testleri başlatın
  • Temizlik işlemlerini çalıştırmak için, başka, tamamen farklı, komut dosyası kullan

Tabii ki, bu tüm testleri çalıştırmak edildikten sonra temiz-up sadece bir kez yapılabilir anlamına gelir; ama hiç yoktan iyidir herhalde.


Now, how to do that in an automated way ?

Basit çözüm muhtemelen hem komutları çalışan bir kabuk betiği, kullanmak olacaktır; Böyle bir şey, ben söylemek istiyorum:

#!/bin/sh

php /.../launch-tests.php

php /.../cleanup.php

Ve bu kabuk betiği başlatarak sınamaları çalıştırmak.