Khi kiểm tra các trường hợp ngoại lệ với PHPUnit, cách tốt nhất để yêu cầu mọi tuyên bố hoặc xác nhận phải ném một ngoại lệ để kiểm tra vượt qua là gì?Làm cách nào để kiểm tra nhiều ngoại lệ với PHPUnit?
tôi về cơ bản muốn làm một cái gì đó như thế này:
public function testExceptions()
{
$this->setExpectedException('Exception');
foo(-1); //throws exception
foo(1); //does not throw exception
}
//Test will fail because foo(1) did not throw an exception
tôi đã đi lên với những điều sau đây, mà không được công việc, nhưng khá xấu xí IMO.
public function testExceptions()
{
try {
foo(-1);
} catch (Exception $e) {
$hit = true;
}
if (!isset($hit))
$this->fail('No exception thrown');
unset($hit);
try {
foo(1);
} catch (Exception $e) {
$hit = true;
}
if (!isset($hit))
$this->fail('No exception thrown');
unset($hit);
}
Tôi chắc chắn thấy quan điểm của bạn, mặc dù nó vẫn cảm thấy hơi lạ khi có nhiều bài kiểm tra khi điểm của mỗi người là đảm bảo rằng một ngoại lệ được ném. – etheros
Bạn cũng có thể sử dụng '@dataProvider annotation' để chuyển các giá trị (và thậm chí cả tên của một ngoại lệ được mong đợi - sử dụng nó với '$ this-> setExpectedException ($ x)'). Việc thêm một giá trị thử nghiệm mới (có thể ném một ngoại lệ) sẽ chỉ là một mục nhập mảng khác trong hàm dataProvider. –
Robert Martin sẽ nói để luôn phân chia các trường hợp thành các xét nghiệm khác nhau. Theo tôi, câu trả lời @AlisterBulman cho thấy giải pháp hoàn hảo cho vấn đề. –