Nếu bạn thực hiện mọi phương pháp thử nghiệm riêng lẻ, mã kiểm tra của bạn sẽ chia sẻ nhiều dòng chỉ đơn giản là tạo đối tượng cần kiểm tra. Mã chia sẻ này có thể (nhưng không NÊN) đi vào phương pháp thiết lập.
Mọi thứ cần được thực hiện để tạo đối tượng cần kiểm tra sau đó cũng đi vào phương pháp thiết lập, ví dụ tạo đối tượng giả được chèn vào hàm tạo của đối tượng thử nghiệm.
Không có điều gì cần phải được rớt xuống vì cuộc gọi tiếp theo để thiết lập sẽ khởi tạo biến thành viên lớp với một tập hợp các đối tượng mới.
Điều duy nhất cần teardown là nếu thử nghiệm của bạn để lại một cái gì đó đằng sau vĩnh viễn, như các tệp đã tạo hoặc các mục cơ sở dữ liệu. Nó thực sự không phải là một ý tưởng tốt để viết các bài kiểm tra mà làm những việc như vậy, nhưng tại một số điểm bạn không thể trừu tượng nữa và phải chạm vào các công cụ như đĩa cứng, cơ sở dữ liệu hoặc mạng thực.
Vì vậy, có rất nhiều thiết lập nhiều hơn teardown cần thiết, và tôi luôn luôn xóa phương pháp teardown nếu không có công việc phải được thực hiện cho thử nghiệm này.
mocks Về, tôi làm việc như thế này:
private $_mockedService;
private $_object;
protected function setUp()
{
$this->_mockedService = $this->getMock('My_Service_Class');
$this->_object = new Tested_Class($this->_mockService);
}
public function testStuff()
{
$this->_mockedService->expects($this->any())->method('foo')->will($this->returnValue('bar'));
$this->assertEquals('barbar', $this->_object->getStuffFromServiceAndDouble());
}
Sự khác biệt là bạn chỉ cần thiết lập mã một lần, dù có bao nhiêu bài kiểm tra có trong lớp thử nghiệm của bạn –
@MarkBaker như vậy ... chỉ Ví dụ: khi tạo chủ thể thử nghiệm, yêu cầu nhiều dòng? – gremo
Một ví dụ điển hình là thiết lập một bảng cơ sở dữ liệu và phá hủy nó một lần nữa khi kết thúc thử nghiệm. – busypeoples