SimpleTest vs PHPunit


127

Tôi đã tự hỏi nếu bất cứ ai có kinh nghiệm trong cả hai công cụ này có thể làm sáng tỏ sự khác biệt đáng kể giữa hai nếu có?

Bất kỳ sức mạnh cụ thể của từng mà làm cho nó phù hợp cho bất kỳ trường hợp cụ thể?


Tôi muốn dùng PHPUnit thì tốt hơn nhiều
joao baptista

9
... và tại sao? Cố gắng giải thích câu trả lời của bạn, cung cấp tài nguyên / liên kết / ví dụ.o
Manuel

<snark> Tại sao không phải cả hai? </ snark>
Agi Hammerthief

Câu trả lời:


90

Câu hỏi này khá cũ nhưng vì nó vẫn nhận được lưu lượng truy cập và câu trả lời Tôi mặc dù tôi nêu quan điểm của mình ở đây một lần nữa vì vậy tôi đã làm nó trên một số câu hỏi khác (mới hơn).

Tôi thực sự rất băn khoăn rằng SimpleTest vẫn được coi là một giải pháp thay thế cho phpunit. Có lẽ tôi chỉ đang hiểu sai nhưng theo như tôi đã thấy:

  • PHPUnit là tiêu chuẩn; hầu hết các khung sử dụng nó (như Zend Framework (1 & 2), Cake, Agavi, thậm chí Symfony đang bỏ Khung riêng của họ trong Symfony 2 cho phpunit).
  • PHPUnit được tích hợp trong mọi IDE IDE (Eclipse, Netbeans, Zend Stuide, PHPStorm) và hoạt động độc đáo.
  • Simpletest có phần mở rộng nhật thực cho PHP 5.1 (còn gọi là cũ) và không có gì khác.
  • PHPUnit hoạt động tốt với mọi máy chủ tích hợp liên tục vì nó xuất ra tất cả các tệp nhật ký tiêu chuẩn cho báo cáo kiểm tra và bảo hiểm mã.
  • Đơn giản nhất là không. Mặc dù đây không phải là một vấn đề lớn khi bắt đầu, nó sẽ cắn bạn rất nhiều khi bạn ngừng "chỉ kiểm tra" và bắt đầu phát triển phần mềm (Có câu nói đó là khiêu khích :) Đừng quá nghiêm trọng).
  • PHPUnit được duy trì tích cực, ổn định và hoạt động tốt cho mọi cơ sở mã, mọi kịch bản và mọi cách bạn muốn viết bài kiểm tra của mình.
  • (Chủ quan) PHPUnit cung cấp các báo cáo bảo hiểm mã đẹp hơn nhiều so với Simpletest
  • Với PHPUnit, bạn cũng nhận được các báo cáo này trong IDE của mình ( Netbeans , Eclipse, ...)
  • Ngoài ra có một vài gợi ý cho a web interface to phpunit tests.

Tôi chưa thấy bất kỳ đối số có lợi cho SimpleTest. Nó thậm chí không đơn giản hơn để cài đặt vì PHPUnit có sẵn thông qua lê:

pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit

và "bài kiểm tra đầu tiên" trông khá giống nhau.

PHPUnit 3.7thậm chí còn dễ dàng hơn để cài đặt nó chỉ bằng cách sử dụngPHAR Archive

wget http://pear.phpunit.de/get/phpunit.phar
chmod +x phpunit-3.7.6.phar

hoặc cho windows chỉ cần tải xuống phar và chạy:

php phpunit-.phar

hoặc khi sử dụng các cách cài đặt của nhà soạn nhạc được hỗ trợ như

"require-dev": {
    "phpunit/phpunit": "3.7.*"
}

vào composer.json của bạn.


Đối với mọi thứ bạn muốn kiểm tra PHPUnit sẽ có một giải pháp và bạn sẽ có thể tìm thấy trợ giúp khá nhiều ở mọi nơi (SO, #phastait kênh irc trên freenode, khá nhiều nhà phát triển php;))

Vui lòng sửa cho tôi nếu tôi đã nói điều gì đó sai hoặc quên điều gì đó :)

Tổng quan về các công cụ kiểm tra PHP

Video: http://conference.phpnw.org.uk/phpnw11/schedule/sebastian-bergmann/

Các slide: http://www.sl slideshoware.net/sebastian_bergmann/the-php-testers-toolbox-osi-days-2011

Nó đề cập đến những thứ như Atoum tự gọi mình là: "Một khung kiểm thử đơn vị đơn giản, hiện đại và trực quan cho PHP!"


Công bố đầy đủ

Ban đầu tôi đã viết câu trả lời này vào tháng 1 năm 2011 khi tôi không có liên kết với bất kỳ dự án Kiểm thử PHP nào. Kể từ đó, tôi trở thành người đóng góp cho PHPUnit.


5
Tôi đã phát hiện ra rằng kiểm tra web đơn giản dễ dàng hơn để thiết lập và chạy hơn so với kiểm tra web của phpunit. Vì đó là điều rất cần thiết với php, đây là một chiến thắng cho các dự án vừa và nhỏ, nơi bạn chỉ muốn đưa vào một khung thử nghiệm ngay lập tức và điều quan trọng là các cấp độ thử nghiệm đơn giản. Ví dụ: loại trừ các kiểm tra web, tôi có xu hướng chỉ sử dụng phương thức assertTrue () một cách đơn giản. Tất nhiên, các bài kiểm tra web trở nên phức tạp hơn, nhưng chúng không cần phải quá mức.
Kzqai

1
"> Vì đó là điều khá cần thiết với php" - Tôi hoàn toàn không đồng ý với điều này. Tôi chưa thấy bất kỳ dự án php (hoặc khung) nào chạy các thử nghiệm của nó thông qua trình duyệt. Nó tạo ra rất nhiều vấn đề không có lợi ích thực sự. Thời gian mà mã php được phát triển trên một hệ thống lưu trữ được chia sẻ bằng cách sử dụng đồng bộ hóa ftp đã chết và biến mất ( ngón tay chéo ) và không, dù là nhỏ, dự án yêu cầu một máy chủ web đang chạy (nhiều nhất là một tàu php ra khỏi hộp). ĐƠN VỊ Kiểm tra thông qua trình duyệt chứ không phải cli hay IDE chỉ là trường hợp sử dụng hiếm hoi mà tôi không nghĩ nó quan trọng.
edorian

13
Một lý do mạnh mẽ để xem xét SimpleTest trên PHPUnit là cái sau là một công cụ dòng lệnh phải được cài đặt trên máy chủ chạy các bài kiểm tra mà đôi khi khó khăn hơn nhiều so với việc chỉ sử dụng includecác tệp .PHP của SimpleTest (như những gì khác đã giải thích.) đối với các lập trình viên chuyên nghiệp xây dựng ra PHPUnit môi trường thử nghiệm riêng của họ nghe có vẻ khó khăn để đánh bại nhưng nếu tích hợp một hệ thống kiểm tra vào một ứng dụng mã nguồn mở dựa trên PHP nơi "phát triển" cho các ứng dụng có thể có tốt nhất (cái mà tôi gọi) "lập trình nghề nghiệp" sau đó sự đơn giản của SimpleTest có một sức hấp dẫn thực sự, với tôi dù thế nào đi nữa. FWIW.
MikeSchinkel

2
@MikeSchinkel Tôi không thể đồng ý nhiều hơn. Chúng tôi đã sử dụng SimpleTest như một giải pháp thử nghiệm dựa trên trình duyệt tích hợp cho khung ứng dụng bespoke của chúng tôi. Nó luôn có sẵn và không yêu cầu cấu hình cài đặt ngoài kéo svn vì nó được bao gồm trong nguồn của khung. Chúng tôi đã chuyển sang PHPUnit để tích hợp CIS. Vì chúng tôi là một cửa hàng Windows, PHPUnit có thể là một cơn ác mộng khi cài đặt và định cấu hình, và nhiều nhà phát triển cơ sở của chúng tôi chỉ đơn giản là phá vỡ môi trường hoặc mất ý chí kiểm tra.
Gavin

1
Các liên kết đến các slide bị hỏng.
Dmitri Zaitsev

35

Bây giờ tôi thích PHPUnit hơn, nhưng khi tôi bắt đầu, tôi đã sử dụng SimpleTest vì tôi không phải lúc nào cũng có quyền truy cập vào dòng lệnh. SimpleTest là tốt, nhưng điều duy nhất nó thực sự có trên PHPUnit, theo tôi, là người chạy web.

Những lý do tôi thích PHPUnit là nó tích hợp với các công cụ phát triển PHP khác như phing (cũng như SimpleTest), phpUnderControlXinc . Kể từ phiên bản 3.0, nó hỗ trợ chế giễu , đang được tích cực phát triển và tài liệu này rất tuyệt vời.

Thực sự cách duy nhất để trả lời câu hỏi này cho chính bạn là thử cả hai lần và xem cái nào phù hợp với phong cách của bạn hơn.

EDIT: Phing hiện cũng tích hợp với SimpleTest.


4
Chỉ cần một lưu ý, trang web của phing nói rằng nó hỗ trợ SimpleTest
philfreo

18
  • Tôi KHÔNG thể hiểu cách tải xuống và cài đặt PHPUnit.
  • Tuy nhiên, tôi có thể dễ dàng hiểu cách cài đặt SimpleTest.

    (Theo như tôi có thể nhớ các hướng dẫn cho PHPUnit đã nói điều gì đó dọc theo dòng "cài đặt nó qua PEAR và chúng tôi sẽ không đưa ra bất kỳ hướng dẫn nào về cách thực hiện theo bất kỳ cách nào khác") xem:

  • http://www.phastait.de/manual/civerse/en/installation.html

Đối với SimpleTest , chỉ cần tải xuống và trỏ đến mã từ mã của bạn.

Vì vậy, Simpletest đã thắng cho tôi.


4
Tôi cho rằng tài liệu đã thay đổi kể từ khi bạn đăng câu trả lời của bạn sau đó. Hôm nay, bạn chỉ cần gõ 3 lệnh và nó sẽ được cài đặt, bạn thậm chí không phải tự tải xuống bất cứ thứ gì.
Anti Veeranna

5
Bạn có thể cài đặt PHPUnit qua PEAR, tải xuống thủ công hoặc lấy mã mới nhất từ ​​github. Có một liên kết rõ ràng với các hướng dẫn cài đặt trên trang chủ. SimpleTest chỉ cung cấp cho tôi một tùy chọn, chỉ vào sourceforge và đó là vô số quảng cáo ...
Potherca

1
Trong Windows, PHPUnit là một nỗi đau để cài đặt. Tôi đã phải cài đặt nó trên 2 máy trạm. Lần đầu tiên mất 3 giờ, với sự trợ giúp của kênh PEAR IRC. Đối với cái thứ hai (cùng hệ điều hành) tôi không bao giờ thành công. Điều đó nói rằng, trên Linux nó là một sự quyến rũ.
FMaz008

1
SimpleTest +1 Dễ cài đặt Dễ sử dụng. PHPUnit mạnh hơn, tuy nhiên, đơn giản nhất để đáp ứng nhu cầu của tôi.
Cheung

Mọi thứ có thể đã thay đổi kể từ '09, nhưng PHPUnit đã cài đặt trong vài giây chỉ với một vài lệnh trên Windows.
Cypher


13

Một nửa số điểm được đề cập trong câu trả lời được chấp nhận đơn giản là không đúng:

SimpleTest

  • thiết lập dễ dàng hơn (giải nén vào thư mục, bao gồm và chạy)
  • chỉ cần kiểm tra thư mục vào kiểm soát phiên bản (thử làm điều đó với phpunit ngay bây giờ :))
  • ít phụ thuộc hơn và nhiều tiện ích mở rộng (webtester, formtester, auth)
  • một phóng viên bảo hiểm mã tốt, dễ dàng mở rộng (dấu chấm, tên hàm, màu sắc)
  • một bản tóm tắt bảo hiểm mã (cuối cùng đã hạ cánh trong PHPUnit 4.x)
  • một người chạy web tốt và một người chạy web ajax, với các nhóm và thực thi tập tin duy nhất
  • vẫn là công cụ tìm khác tốt hơn (không có vấn đề về khoảng trắng hoặc dòng mới)
  • một bộ điều hợp / trình bao bọc để chạy SimpleTests bằng phpUnit và ngược lại
  • khả năng tương thích PHP5.4 +

Nhược điểm:

  • không theo tiêu chuẩn ngành (PHPUnit)
  • không tích cực duy trì

1
Vẫn hữu ích cho tôi và máy chủ php4 của tôi ^^ "
javier_domenech

Cảm ơn. Tôi đã nâng cấp cơ sở mã của SimpleTest để hoạt động với các phiên bản PHP mới hơn và một số điều chỉnh khác đang đến trong năm. - PHP4 là EOL từ rất lâu đời và không nhận được bất kỳ bản vá bảo mật nào. Tôi sẽ không sử dụng nó trên các dịch vụ bên ngoài nữa. Bạn nên thuyết phục sếp cho phép bản cập nhật chạy tối thiểu v5.5 hoặc tốt hơn v5.6: php.net/supported-versions.php#php-5.6
Jens A. Koch

Tôi biết Jens, cảm ơn vì lời khuyên. Giải pháp kiểm tra rất hay của bạn
javier_domenech 22/1/2016

1
=) Cảm ơn bạn đã cho tôi xem repo Github. Tôi đã bắt đầu lo lắng về "bit không được duy trì". Chỉ là bề ngoài, làm phiền bạn, vì nó vẫn làm mọi thứ tôi từng muốn từ một khung kiểm tra ít ồn ào với mã hiện đại mà tôi làm việc cùng.
jeteon

SimpleTest có cách linh hoạt hơn trong cách bạn thiết lập các bộ thử nghiệm của mình vì bạn có thể làm tất cả bằng mã php. Vì vậy, bạn có một ngôn ngữ lập trình đầy đủ theo ý của bạn, không chỉ các tệp cấu hình xml và các tham số đầu cuối. PHPUnit có thể được hỗ trợ nhiều hơn bởi các công cụ, nhưng nói nhiều hơn về cách cộng đồng PHP tiếp tục chọn cách sao lưu những thứ kém hơn.
still_dreaming_1

8

Tôi thấy SimpleTest thậm chí còn dễ dàng hơn PHPUnit để thiết lập. Chỉ cần giải nén nó và bạn là tốt để đi. Lợi ích của việc này là nếu bạn đang làm việc tại nhiều máy, vì bạn có thể lưu trữ toàn bộ khung kiểm tra giống như mã nguồn của mình và từ đó biết rằng bạn đang sử dụng cùng một mã khung. Đặc biệt là nếu bạn sửa đổi nó theo bất kỳ cách nào.

Vì vậy, tôi muốn nói rằng một điểm mạnh của SimpleTest là nó rất nhẹ và di động.

SimpleTest cũng xuất xưởng với GUI HTML rất đơn giản, khá dễ mở rộng nếu bạn muốn. Theo tôi biết, PHPUnit không bao gồm GUI HTML, nhưng có sẵn GUI: s để tải xuống, chẳng hạn như Cool .


À, người đàn ông tôi đã đánh giá thấp điều này hoàn toàn tình cờ và thậm chí không nhận ra nó cho đến ngày hôm sau. Bây giờ phiếu bầu của tôi bị khóa trong ... Xin lỗi.
still_dreaming_1

8

Vâng, tôi đã tạo một trình chạy trường hợp kiểm tra giao diện người dùng dựa trên web phpUnit và làm cho nó có sẵn trên sourceforge. Sử dụng ajax và có giao diện khá tuyệt vời nếu bạn muốn cho nó một shot kiểm tra nó tại sourceforge. Tên dự án là phpunitwebui và trang web là http://phastaitwebui.sourceforge.net/


4

Như đã được chỉ ra, nó chủ yếu là một lựa chọn ưu tiên, vì cả hai sẽ chạy các bài kiểm tra bạn viết cho nó và báo cáo lại kết quả.

Giao diện người dùng web Simpletest rất hữu ích, nhưng đôi khi nó cũng có thể trở nên cồng kềnh. Trong dự án hiện tại của tôi, tôi sẽ phải đặt nhiều công việc hơn vào một hệ thống để làm cho ứng dụng của tôi (API) hoạt động với giao diện web (thiết lập chính xác apache, sao chép tệp vào gốc public_html, v.v.) so với trước đây để đơn giản chạy phpunit từ không gian làm việc nhật thực. Vì vậy, tôi chọn PHPUnit. Ngoài ra, việc sử dụng PEAR là một điểm cộng lớn vì bạn không cần theo dõi cập nhật thủ công. Chỉ cần chạy pear upgrademột lần và PHPUnit sẽ được cập nhật.


Tôi không nhận được phân tích này. Bạn có nói rằng bạn đang kiểm tra chức năng loại trình duyệt thông qua plugin nhật thực cho phpunit, thay vì thiết lập apache cục bộ?
Kzqai

Không, tôi đang nói rằng trong dự án của tôi, vì không có chức năng loại trình duyệt, tôi đang sử dụng phpunit thông qua nhật thực.
T0xicCode

2

Đây là từ quan điểm của một nhà phát triển PHP rất giản dị:

Tôi đã mất hai ngày để nắm bắt PHPUnit, chủ yếu là cố gắng gỡ lỗi theo Eclipse mà cuối cùng tôi đã từ bỏ.

Tôi mất hai giờ để thiết lập Simpletest, bao gồm cả gỡ lỗi trong Eclipse.

Có thể tôi sẽ tìm thấy những thiếu sót của Simpletest trong tương lai nhưng cho đến nay nó vẫn làm tốt những gì tôi cần: TestClass, đối tượng Mock, gỡ lỗi mã kiểm tra và giao diện web để xem nhanh tình huống.

Một lần nữa: Điều này theo quan điểm của một người dùng PHP rất bình thường (thậm chí không phải nhà phát triển :-)


1

Tôi đã không kiểm tra Simple Test trong một thời gian, lần trước nó có plugin nhật thực, đây là một yếu tố chính đối với tôi, nhưng nó đã không được cập nhật trong một thời gian dài. Sebastian Bergmann vẫn rất tích cực làm việc trên PHPUnit, nhưng nó vẫn thiếu một plugin tốt cho nhật thực - nhưng nó được bao gồm cho Zend Studio mới.


1

Câu hỏi này đã cũ, nhưng tôi muốn thêm kinh nghiệm của mình: PHPUnit dường như là tiêu chuẩn bây giờ, nhưng nếu bạn làm việc với một hệ thống kế thừa sử dụng rất nhiều biến số toàn cầu, bạn có thể bị mắc kẹt ngay từ đầu. Có vẻ như không có cách nào tốt để thực hiện kiểm tra với các vars toàn cầu trong PHPUnit, bạn dường như phải đặt các biến của mình thông qua $ GLOBALS, điều này KHÔNG TỐT nếu bạn có hàng tấn tệp đặt biến toàn cục ở mọi nơi. OK một số người có thể nói rằng vấn đề nằm ở hệ thống cũ nhưng điều đó không có nghĩa là chúng tôi không thể thực hiện các thử nghiệm trên hệ thống đó. Với SimpleTest điều đó thật đơn giản. Tôi cho rằng nếu PHPUnit cho phép chúng tôi bao gồm một tệp trên toàn cầu, không nằm trong bất kỳ phạm vi lớp / chức năng nào thì nó cũng sẽ không phải là vấn đề quá lớn.

Một giải pháp đầy hứa hẹn khác là http://www.enhance-php.com , có vẻ hay :)


Tôi đã luôn sử dụng <phpunit backupGlobals="false">cấu hình XML và chưa bao giờ có bất kỳ vấn đề nào với toàn cầu trong các thử nghiệm ...
Potherca

@ mr1031011 liên kết của bạn không đi đâu đó hữu ích. Có lẽ bạn có nghĩa là ?: github.com/Enhance-PHP/Enhance-PHP
user12345

@Potherca nói với tôi về điều đó - tôi bước đầu đã có rất nhiều vấn đề với globals trong một dự án mã di sản, và tôi nghĩ rằng tôi đã thử tất cả các chú thích @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState, global $xxxvà tất cả các kết hợp của nó, trước khi cố gắng --no-globals-backupvà đột nhiên nhìn thấy tất cả làm việc như mong đợi. : D
Conny 9/12/14

-2

Khi có hàng ngàn chức năng để kiểm tra cùng một lúc, phpunit sẽ hoạt động, thử nghiệm đơn giản sẽ bị thiếu khi nó dựa trên web.

Tôi vẫn đang sử dụng web đơn giản để thử nghiệm quy mô nhỏ.

Nhưng cả hai đều tốt


SimpleTest không hoàn toàn dựa trên web. Tôi đã sử dụng nó độc quyền từ dòng lệnh cho đến bây giờ.
jeteon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.