Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 38 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
38
Dung lượng
131,09 KB
Nội dung
A tool for test-driven development Team work: Vũ Đức Luận(c) Nguyễn Tiến Đạt Nguyễn Khánh Thiện Các Vấn đề cần làm rõ: 1.xUnit framework? 2.Lịch sử phát triển Junit 3.Kiến trúc tổng quan 4.Tại sao phải tạo 1 test suit? 5.Cách viết 1 Testcase 6.Các phương thức Assert 7.Set Up và Tear Down 8.Test Exception 9.Junit in Eclipse 10.Các công cụ Testing khác Phân chia công việc Nguyễn Khánh Thiện Vũ Đức Luận Nguyễn Tiến Đạt 1.xUnit framework? 2.Lịch sử phát triển Junit 3.Kiến trúc tổng quan 4.Tại sao phải tạo 1 test suit? 5.Cách viết 1 Testcase 6.Các phương thức Assert 7.Set Up và Tear Down 8.Test Exception 9.Junit in Eclipse 10.Các công cụ Testing khác Nó liên quan đến việc kiểm tra các đơn vị cơ bản của phần mềm . Những đoạn code của unit testing hướng tới mục tiêu là các đơn vị đối tượng cụ thể nào đó , kiểm tra đầu vào đầu ra , một chi tiết một thời điểm cụ thể . xUnit framework là họ của các unit testing frameworks với những ngôn ngữ và các nền tảng lập trình khác nhau . Danh sách unit testing framework : o o o o ! o ""#$ o !%%! o && o '' Lịch sử phát triển Junit JUnit là một framework đơn giản dùng cho việc tạo các unit testing tự động, và chạy các test có thể lặp đi lặp lại. JUnit là một chuẩn trên thực tế cho unit testing trong Java. JUnit về nguồn gốc được viết bởi 2 tác giả Erich Gamma và Kent Beck. o Vào giữa những năm 90 của thế kỷ 20 , Kent Beck đã phát triển một bộ test xUnit đầu tiên cho Smalltalk . o Beck và Gamma phát triển JUnit trên một chuyến bay từ Zurich đến Washington, DC.Từ đó Junit trở thành công cụ chuẩn cho Test-Driven Development trong Java . o Ngày nay, JUnit được tích hợp sẵn trong các Java IDEs (Eclipse, BlueJ, Jbuilder, DrJava) . Kiến trúc tổng quan JUnit test framework cung cấp cho chúng ta các gói lớp có sẵn cho phép chúng ta viết các phương thức test một cách dễ dàng . TestRunner sẽ chạy các test và trả về kết quả là các Test Results Các lớp của chương trình test chúng ta sẽ được kế thừa các lớp trừu tượng TestCase . Khi viết các Test Case chúng ta cần biết và hiểu lớp Assert class . Một số định nghĩa trong mô hình tổng quát : o Test case : test case định nghĩa môi trường mà nó có thể sử dụng để chạy nhiều test khác nhau o TestSuite : testsuite là chạy một tập các test case và nó cũng có thể bao gồm nhiều test suite khác . test suite chính là tổ hợp các test . Tại sao phải tạo 1 testsuit Obviously you have to test your code—right? You can do ad hoc testing (running whatever tests occur to you at the moment), or You can build a test suite (a thorough set of tests that can be run at any time) Disadvantages of a test suite It’s a lot of extra programming True, but use of a good test framework can help quite a bit You don’t have time to do all that extra work False! Experiments repeatedly show that test suites reduce debugging time more than the amount spent building the test suite Advantages of a test suite Reduces total number of bugs in delivered code Makes code much more maintainable and refactorable Thông thường JUnit tự động tạo ra các Test Suite ứng với mỗi Test Case. Tuy nhiên bạn muốn tự tạo các Test Suite của riêng mình bằng cách tổ chức các Test vào Test Suite. JUnit cung cấp lớp junit.framework.TestSuite hỗ trợ việc tạo các Test Suite Khi bạn sử dụng giao diện text hay graphic, JUnit sẽ tìm phương thức sau trong test case của bạn: public static Test suite() { … } Nếu không thấy phương thức trên, JUnit sẽ sử dụng kỹ thuật reflection. Tại sao phải tạo 1 testsuit ( ) ##)#*)+#)#!#,)) -)) ( )# )#)#./),)) ))#.#* ##/0)) 1))) 1) Bằng cách truyền đối tượng TestGame.class vào construtor TestSuite, bạn đang thông báo cho JUnitbiết để xác định tất cả các phương thức testXXX() trong lớp đó và thêm chúng vào suite. Đoạn mã trên không làm khác gì so với việc JUnit tự động làm, tuy nhiên bạn có thể thêm các test cá nhân để chỉ chạy các test nhất định nào đó hay là điều khiển thứ tự thực thi [...]... mã dọn dẹp chỉ sau khi tất cả test kết thúc Ở phần trên, JUnit gọi phương thức setUp() trước mỗi test và gọi tearDown() sau khi mỗi test kết thúc, vì thế để làm được điều như trên, chúng ta sẽ sử dụng lớp junit. extension.TestSetup để đạt được yêu cầu trên Ví dụ sau sẽ minh họa việc sử dụng lớp trên import junit. extensions.TestSetup; import junit. framework.*; public class TestPerson extends TestCase { ... và Tear Down Hai phương thức setUp() và tearDown() là một phần của lớp junit. framework.TestCase Khi sử dụng 2 phương thức setUp() và tearDown() sẽ giúp chúng ta tránh được việc trùng mã khi nhiều test cùng chia sẻ nhau ở phần khởi tạo và dọn dẹp các biến JUnit tuân thủ theo một dãy có thứ tự các sự kiện khi chạy các test .JUnit tuân theo các bước sau cho mỗi phương thức test: o o Gọi phương thức... thức assertXXX() được dùng để kiểm tra các điều kiện khác nhau .junit. framework.TestCase, lớp cha cho tất cả các test case, thừa kế từ lớp junit. framework.Assert Lớp này định nghĩa khá nhiều các phương thức assertXXX() Các phương thức test hoạt động bằng cách gọi những phương thức này Sau đây là mô tả các phương thức assertXXX() khác nhau có trong lớp junit. framework.Assert: Các phương thức assert() assertFalse():... Bowl(); assertEquals(“Size of an empty list should be zero.”, 0, emptyList.size()); assertTrue(“An empty bowl should report empty.”, emptyBowl.isEmpty()); } Things to notice: Specific method signature – public void testWhatever() o Allows them to be found and collected automatically by JUnit Coding follows pattern Notice the assert-type calls… public class Person { private String firstName; ...import junit. framework.*; public class TestGame extends TestCase { private Game game; private Ship fighter; public TestGame(String name) { super(name); } … public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest(new TestGame("testCreateFighter")); suite.addTest(new TestGame("testSameFighters")); return suite; } } Cách viết 1 Testcase To start using JUnit, ... String last = (this.lastName != null) ? this.lastName : "?"; return first + last; } public String getFirstName() { return this.firstName; } public String getLastName() { return this.lastName; } } import junit. framework.TestCase; public class TestPerson extends TestCase { public TestPerson(String name) { super(name); } /** * Xac nhan rang name duoc the hien dung dinh dang */ public void testGetFullName() { ... suite.addTest(new TestGame("testSameFighters")); return suite; } } Cách viết 1 Testcase To start using JUnit, create a subclass of TestCase, to which you add test methods Here’s a skeletal test class: import junit. framework.TestCase; public class TestBowl extends TestCase { } //Test my class Bowl Name of class is important – should be of the form TestMyClass or MyClassTest This naming convention lets TestRunner... //Thực hiện các đoạn mã khởi tạo một lần ở đây } protected void tearDown() throws Exception { //Thực hiện các đoạn mã dọn dẹp ở đây } }; return setup; } } TestSetup là một lớp thừa kế từ lớp junit. extension.TestDecorator, Lớp TestDecorator là lớp cơ sở cho việc định nghĩa các test biến thể Lý do chính để mở rộng TestDecorator là để có được khả năng thực thi đoạn mã trước và sau khi một test... thức setUp() và tearDown() bên trong lớp TestPerson vẫn được thực thi trước và sau mỗi phương thức test bên trong lớp TestPerson Test Exceptions Đảm bảo Code chạy có thể chạy như mong đợi trong các trường hợp đặc biệt Junit cung cấp test Exception để có thể ném ra những ngoại lệ mong đợi Test Excceptions Expected Các @test có thêm một tham số tùy chọn “expected” có giá trị như các lớp con của Throwable Try/catch... server của Java Là một thư viện nguồn mở của Java được dùng để tương tác với các server HTTP Nunit: o Framework dành cho việc testing unit trong tất cả các ngôn ngữ NET Khởi đầu nó cũng được bắt đầu từ JUnit, nó là một công cụ hỗ trợ việc unit testing cho Microsoft.NET Các hướng nghiên cứu phát triển Ajax testing Testing JSP Applications Testing OSGi components Testing database Access Testing . Junit JUnit là một framework đơn giản dùng cho việc tạo các unit testing tự động, và chạy các test có thể lặp đi lặp lại. JUnit là một chuẩn trên thực tế cho unit testing trong Java. JUnit. . o Beck và Gamma phát triển JUnit trên một chuyến bay từ Zurich đến Washington, DC.Từ đó Junit trở thành công cụ chuẩn cho Test-Driven Development trong Java . o Ngày nay, JUnit được tích hợp sẵn. thường JUnit tự động tạo ra các Test Suite ứng với mỗi Test Case. Tuy nhiên bạn muốn tự tạo các Test Suite của riêng mình bằng cách tổ chức các Test vào Test Suite. JUnit cung cấp lớp junit. framework.TestSuite