2010-08-25 31 views
10

Có ai có một liên kết đến một hướng dẫn làm việc tốt hay một cuốn sách về cách bắt đầu với việc thêm lớp DBUnit vào các bài kiểm tra PHPUNit của tôi không?PHPUnit và DBUnit - bắt đầu

Tôi đã thử làm theo các mã trong

protected function getDatabaseTester() 
{ 
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); 
    $connection = new PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection($pdo); 
    $tester = new PHPUnit_Extensions_Database_DefaultTester($connection); 
    $tester->setSetUpOperation(PHPUnit_Extensions_Database_Operation_Factory::CLEAN_INSERT()); 
    $tester->setTearDownOperation(PHPUnit_Extensions_Database_Operation_Factory::NONE()); 
    /* 
    * the next line fails with the error 

    PHP Fatal error: __autoload(): Failed opening required 'PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet.php' (include_path= *** 

    */ 
    $tester->setDataSet(new PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet(dirname(__FILE__).'/../../../files/xml_database_export.xml')); 
    return $tester; 
} 

XML được tạo ra thông qua mysqldump lệnh. Tôi vui vẻ sử dụng CSV, hoặc thậm chí là một mảng trong bộ nhớ (bất cứ điều gì làm việc)

Thật không may tôi dường như không thể bắt đầu hệ thống này.

Trả lời

9

Có một chương để kiểm tra cơ sở dữ liệu trong cuốn hướng dẫn PHPUnit:

Và Ultimate Hướng dẫn B. Eberlei để kiểm tra DB với PHPUnit

Ngoài ra còn có một bài đăng trên blog của tác giả PHPUnit của Sebastian Bergmann về chủ đề (2008 mặc dù):

Một số bài đăng trên blog thậm chí lớn tuổi bởi Mike Lively, các tác giả DbUnit phần mở rộng có thể được tìm thấy tại

Một hướng dẫn gần đây (2010) sẽ là trong Blog Matthew Turland của:

Bạn cũng có thể truy cập #phpunit on Freenode IRC để nhận được hỗ trợ chính thức.

+2

Sau một thời gian học DbUnit tốt, tôi muốn có ai đó nói với tôi rằng về cơ bản chỉ là 'TRUNCATE's (xóa) một bảng và điền nó với dữ liệu tùy chỉnh mà bạn cung cấp từ một XML. Rõ ràng, đó là nó. Không có kết nối liên tục huyền diệu, không có thế giới giống như thế giới về tăng trưởng và ước mơ và chơi đùa thông qua các tập dữ liệu tạm thời. Vào cuối ngày, tôi có thể làm điều tương tự với 'TẠO TEMPORARY TABLE' thậm chí còn tốt hơn vì nó duy trì quan hệ. Vì vậy, tôi muốn nói một cái gì đó như 'không lãng phí thời gian của bạn với phần mở rộng này crappy' nhưng do kinh nghiệm hạn chế của tôi, tôi sẽ không. – Ben

+1

Trong khi tôi ở đây tôi sẽ báo cáo một vài điều mà đã cho tôi một thời gian để tìm ra: Bạn cần phải gọi 'parent :: setUp()' nếu bạn đã có một phương thức 'setUp()', nếu không thì cơ sở dữ liệu sẽ không phổ biến. Và trong phương thức đó, DbUnit sẽ "helpfully" nâng cấp 'PDO :: ATTR_ERRMODE' thành" exception "khi nó là' setUp() ', vì vậy ngay cả khi bạn có' ERRMODE_SILENT' bạn sẽ nhận được các ngoại lệ mà bạn không mong đợi chúng. Ngoài ra, tôi không thể tìm thấy một API, vì vậy bạn phải kiểm tra mã nguồn, hoặc đọc sách, giống như tài liệu, nhưng lâu hơn, với những viên đá quý quan trọng ẩn trong các trang văn bản./ rant – Ben

+0

Xin lỗi vì đã đánh lừa, ở trên tôi đã nói 'TẠO TẠO TẠM TỪ 'duy trì quan hệ - thực ra, nó sẽ không duy trì các khóa ngoại. Đừng lo lắng, chỉ cần cuộn một biến 'CREATE TABLE' để thực hiện điều tương tự. – Ben