Transcript Demo

Seminar:
Unit Test
L/O/G/O
4/13/2015
Thực hiện:
Nhóm C
GVHD: Cô Trần Thị Bích Hạnh
1
Nội dung trình bày
4/13/2015
Lý thuyết Unit test
C1
PHPUnit
C5
Junit
C4
CPPUnit
C2
2
Lý thuyết Unit test
• Khái niệm Unit test
• Tại sao cần Unit test
• Vận hành Unit test
4/13/2015
3
Khái niệm
• Kiểm tra các đơn vị riêng lẻ trong
phần mềm.
Vd: Class, library, framework…
• Bảo đảm hoạt động đúng đắn theo
thiết kế ban đầu.
• Developer thực hiện.
4/13/2015
4
Tại sao cần Unit test
• Sớm phát hiện lỗi.
• Chương trình chạy đúng khi mã nguồn
thay đổi.
• Tiết kiệm thời gian debug.
• Giải phóng QA.
• ….
4/13/2015
5
Vận hành Unit test
• When?
• How?
4/13/2015
6
When?
4/13/2015
7
When?
4/13/2015
8
Black box
 Thực hiện đúng chức năng đã thiết kế.
4/13/2015
9
White box
Input
u>1 and
v==0
Yes
x = x/u
No
u==2 or
x>0
No
Output
Yes
++x
 Cú pháp, cấu trúc, trạng thái hệ thống
4/13/2015
10
Mục tiêu
Test plan
Chiến lược
Test case
Dữ liệu test
Thực thi test
Ghi nhận & báo cáo kết quả
4/13/2015
11
Viết test case
Framework
4/13/2015
Class01
Class02
Class03
Class01_Test
Class02_Test
Class03_Test
12
Viết test case (tt)
Class
03
Class02_Test
Class
02
Mock Object
4/13/2015
Class
01
13
Nội dung trình bày
4/13/2015
Lý thuyết Unit test
C1
PHPUnit
C5
Junit
C4
CPPUnit
C2
14
PHPUnit
• PHP là gì?
• Cài đặt và sử dụng PHPUnit như thế nào?
• Demo PHPUnit
4/13/2015
15
PHP là gì?
• PHP viết tắt của PHP Hypertext Preprocessor
• Ngôn ngữ script dùng để phát triển ứng dụng Web
• Là ngôn ngữ server-side script, tương tự như
ASP, JSP, … thực thi ở phía WebServer
• Tập tin PHP có phần mở rộng là .php
• Cú pháp ngôn ngữ giống ngôn ngữ C & Perl
• Phiên bản mới nhất: PHP 5.2.9 (www.php.net)
16
Một số ứng dụng của PHP và
MySQL
Customer Relationship Management
Help Desk
Portal
Portal
Portal
e-Commerce
Course Management System
Wiki
Bulletin Board
PHP at Yahoo!
http://www.yahoo.com
17System
Content Management
PHPUnit
• PHP là gì?
• Cài đặt và sử dụng PHPUnit như thế
nào?
• Demo PHPUnit
18
Cài đặt PHPUnit như thế nào?
• Tải về và cài đặt WAMP
http://www.wampserver.com/en/download.php
• Vào trong thư mục php WAMP
– C:\> cd wamp\bin\php\php5.2.9-1
• Chạy file go-pear.bat tập tin để cài đặt Pear và tất cả
các tập tin cần thiết cho nó
– C:\wamp\bin\php\php5.2.9-1>go-pear.bat
• Khi thực hiện Pear sẽ hỏi bạn một loạt các câu hỏi để
cài đặt tự động được, nếu bạn không biết những gì bạn
làm sau đó chỉ cần chấp nhận giá trị mặc định
19
• Chạy PEAR_ENV.reg để tạo các biến môi trường, để Pear có thể
được gọi là trong bất kỳ thư mục trên các dòng lệnh
– C:\wamp\bin\php\php5.2.9-1>PEAR_ENV.reg
• Nếu bạn không thể gọi Pear từ dấu nhắc lệnh,bạn phải tự thêm vào
thư mục vào đường dẫn trong danh sách biến môi trường, được tìm
thấy trong System Properties -> Advanced-> Environment Variables,
sau đó thêm vào thư mục C:\wamp\bin\php\php5.2.9-1 vào biến
PATH
• Đăng ký hoạt động PHPUnit kênh với Pear
– C:\wamp\bin\php\php5.2.9-1>pear channel-discover pear.phpunit.de
• Bây giờ bạn có thể sử dụng Pear để cài đặt gói từ kênh PHPUnit
– C:\wamp\bin\php\php5.2.9-1>pear install phpunit/PHPUnit
• Bây giờ bạn sẽ tìm thấy những PHPUnit mã nguồn các tập tin theo
thư mục PHP
• Xong rồi bây giờ bạn có thể test bằng phpunit được rồi
20
sử dụng PHPUnit như thế
nào?
• phpunit <đường dẫn đến file php cần
test>
21
PHPUnit
• PHP là gì?
• Cài đặt và sử dụng PHPUnit như thế
nào?
• Demo PHPUnit
22
BankAcount Demo
• Lớp BankAccount phải có các phương
thức:
– Lấy số dư tài khoản – getBalance
– Thiết lập số dư tài khoản – setBalance
– Nạp tiền vào tài khoản – depositMoney
– Rút tiền khỏi tài khoản – withdrawMoney
• Phải đảm bảo 2 điều kiện:
– Số dư tài khoản lúc khởi tảo phải bằng 0
– Số dư tài khoản không thể âm
BankAcount Demo
BankAccountTest.php
Kết quả mong muốn:
testBalanceIsInitiallyZero = pass
testBalanceCannotBecomeNegative = fail
testBalanceCannotBecomeNegative2 = fail
BankAcount Demo
BankAcount Demo
BankAccount.php Version01
 <?php
class BankAccount
{
protected $balance = 0;
public function getBalance()
{
return $this->balance;
}
}
?>
BankAcount Demo
• Film demo
27
BankAcount Demo
BankAccount.php Version02
BankAcount Demo
BankAccount.php Version03
FileWriter Demo
• Lớp FileWriter phải có các phương thức:
– Khởi tạo – FileWriter
– Ghi messenger vào file – Messenger
• Phải đảm bảo 2 điều kiện:
– Khi khởi tạo thì file chưa được tạo.
– Khi ghi messenger vào file thì messenger đó
phải được ghi vào cuối file
FileWriter Demo Version01
FileWriter.php
FileWriterTest.php
BankAcount Demo
• Film demo
32
FileWriter Demo Version02
FileWriter.php
FileWriterTest.php
BankAcount Demo
• Film demo
34
FileWriter Demo Version03
FileWriter.php
FileWriterTest.php
BankAcount Demo
• Film demo
36
Nội dung trình bày
4/13/2015
Lý thuyết Unit test
C1
PHPUnit
C5
Junit
C4
CPPUnit
C2
37
JUnit
• Giới thiệu
• Đặc điểm Junit
• Demo
4/13/2015
38
• JUnit là một phần của họ kiến trúc xUnit
cho việc tạo các unit testing và test cho Java
• JUnit là một framework đơn giản dùng cho
việc tạo các unit testing tự động
• Chạy các test có thể lặp đi lặp lại
• JUnit về nguồn gốc được viết bởi 2 tác giả
Erich Gamma và Kent Beck
1
Xác nhận (assert) việc kiểm tra
kết quả được mong đợi
2
Các Test Suite cho phép chúng ta dễ dàng
tổ chức và chạy các test
3
Hỗ trợ giao diện đồ họa và giao diện dòng lệnh
…
Các test case của JUnit là các lớp
của Java, các lớp này bao gồm
một hay nhiều các phương thức
unit testing, và những test này lại
được nhóm thành các Test Suite.
assertEquals()
assertFalse()
assertNotNull()
assertNotSam()
assertNull()
assertSame()
assertTrue()
fail()
Test sẽ được chấp nhận nếu như 2 giá trị
bằng nhau
Test sẽ được chấp nhận nếu biểu thức sai
Test sẽ được chấp nhận nếu tham chiếu đối
tượng khác null
Test sẽ được chấp nhận nếu cả 2 đều tham
chiếu đến các đối tượng khác nhau
Test sẽ được chấp nhận nếu tham chiếu là null
Test sẽ được chấp nhận nếu cả 2 đều tham
chiếu đến cùng một đối tượng
Test sẽ được chấp nhận nếu biểu thức đúng
Phương thức này làm cho test hiện hành thất
bại, phương thức này thường được sử dụng
khi xử lý các biệt lệ
1
Đầu tiên tạo một lớp con thừa kế
từ lớp junit.framework.TestCase
2
Mỗi unit test là một phương thức public
và không có tham số được bắt đầu
bằng tiếp đầu ngữ test.
Nếu bạn không tuân theo quy tắc
đặt tên này thì JUnit sẽ không xác định
được các phương thức test
một các tự động.
Java Standard
Development Kit
( version 6.0
http://java.sun.com
/javase/downloads/
index.jsp
NetBean
IDE 6.0
http://sunmicro.vo.
llnwd.net/c1/netbe
ans/6.0/final/
Junit-4.1
Junit-3.8.2
http://www.mediafire.
com/download.php?1
deejyu0nzz
Vào File  New Project
2007
2008
Tạo Project TestComputeWizardClass và Add ComputeClassViết code vào
ComputeClass như trên
Build Chương trìnhRight Click vào ComputeClass.javaToolsCreat JUnit
Tests
2007
2008
Nội dung trình bày
4/13/2015
Lý thuyết Unit test
C1
PHPUnit
C5
Junit
C4
CPPUnit
C2
48
CPPUnit
Giới thiệu về CppUnit Framework
Source & Install CppUnit
Update Visual Studio's Include Path
Một số macro cơ bản
Demo
Giới thiệu CppUnit Framework
o CppUnit testing framework: giúp cho
việc test tự động các C++ module
(class) (unittest)
o Được chuyển từ JUnit (Java) bởi
Michael Feathers
o Chạy trên Window/Unix/Solaris
Giới thiệu (tt)
•Các Helper macros giúp khai báo các test
suite dễ dàng hơn
•Hỗ trợ Hierarchical test fixture
•Test Registry làm giảm việc compile lại
•Test Plug-in: Các chu trình compile/test
nhanh hơn
Source & Install CppUnit
Download source:
http://downloads.sourceforge.net/cppunit/cppunit1.12.1.tar.gz
Build CppUnit Libraries:
 Open the $CPPUNIT$\src\CppUnitLibraries.dsw workspace in
VC++
 In the 'Build' menu, select 'Batch Build...'
 In the batch build dialog, select all projects and press the Build
button
 The resulting libraries can be found in the $CPPUNIT$\lib
directory
Update Visual Studio's Include Path
Select Tools -> Options from the menu bar
Select the Directories tab
Set Path
include files
Update Visual Studio's Include Path (tt)
Set Path
Library files
Update Visual Studio's Include Path (tt)
Set Path
Source files
Một số macro cơ bản
• CPPUNIT_FAIL(message)
CPPUNIT_ASSERT(condition)
• CPPUNIT_ASSERT_MESSAGE(message,condition)
• CPPUNIT_ASSERT_EQUAL(expected,current)
• CPPUNIT_ASSERT_EQUAL_MESSAGE(message,
• expected,current)
Ví dụ
void MoneyTest::testEqual() {
// Set up
const Money money123FF( 123, "FF" );
const Money money123USD( 123, "USD" );
const Money money12FF( 12, "FF" );
const Money money12USD( 12, "USD" );
// Process & Check
CPPUNIT_ASSERT( money123FF == money123FF ); // ==
CPPUNIT_ASSERT( money12FF != money123FF ); // !=
amount
CPPUNIT_ASSERT( money123USD != money123FF );// !=
currency
CPPUNIT_ASSERT( money12USD != money123FF ); // !=
currency and != amount
}
Các macros cơ bản
• Các helper macro hỗ trợ trong việc khai báo test suite
cung test case
CPPUNIT_TEST_SUITE( TestSuite);
CPPUNIT_TEST( testCase1 );
CPPUNIT_TEST_EXCEPTION(testCase2, TestException);
CPPUNIT_TEST_SUITE_END();
• TestFactoryRegistry là nơi mà các test suite được đăng
ký trong thời gian khởi tạo
// Registers the fixture into the 'registry'
CPPUNIT_TEST_SUITE_REGISTRATION( MoneyTest );
Demo
Demo với giao diện console.
int main(int argc, char* argv[])
{
// Get the top level suite from the registry
CppUnit::Test *suite =
CppUnit::TestFactoryRegistry::getRegistry().makeTest()
;
// Adds the test to the list of test to run
CppUnit::TextUi::TestRunner runner;
runner.addTest( suite );
// Change the default outputter to a compiler error format
outputter
runner.setOutputter( new CppUnit::CompilerOutputter(
&runner.result(), std::cerr ) );
bool wasSucessful = runner.run();
// Return error code 1 if the one of test failed.
return wasSucessful ? 0 : 1;
}
Demo (tt)
Demo với
giao diện
MFC
BOOL CMyMFCApp::InitInstance() {
CWinApp::InitInstance();
CppUnit::MfcTestRunner runner;
runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );
runner.run();
return FALSE;
}
Thank You!
L/O/G/O
4/13/2015
61