Danh mục

Kiểm thử dễ dàng hơn với EasyMock

Số trang: 19      Loại file: pdf      Dung lượng: 209.98 KB      Lượt xem: 21      Lượt tải: 0    
Jamona

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bắt chước các giao diện, các lớp và các ngoại lệ bằng khung công tác đối tượng giả (mock-object) mã nguồn mở Elliotte Rusty Harold, Giáo sư, Polytechnic University Tóm tắt: Hãy cùng Elliotte Rusty Harold xem xét một số kiểm thử đơn vị khó thực hiện, được làm cho trở nên dễ dàng hơn thông qua các đối tượng giả - cụ thể hơn là khung công tác EasyMock. Thư viện mã nguồn mở này tiết kiệm thời gian cho bạn và giúp bạn làm cho mã đối tượng giả của bạn súc tích và dễ đọc. Phát...
Nội dung trích xuất từ tài liệu:
Kiểm thử dễ dàng hơn với EasyMockKiểm thử dễ dàng hơn với EasyMockBắt chước các giao diện, các lớp và các ngoại lệ bằng khung công tác đối tượnggiả (mock-object) mã nguồn mởElliotte Rusty Harold, Giáo sư, Polytechnic UniversityTóm tắt: Hãy cùng Elliotte Rusty Harold xem xét một số kiểm thử đơn vị khóthực hiện, được làm cho trở nên dễ dàng hơn thông qua các đối tượng giả - cụ thểhơn là khung công tác EasyMock. Thư viện mã nguồn mở này tiết kiệm thời giancho bạn và giúp bạn làm cho mã đối tượng giả của bạn súc tích và dễ đọc.Phát triển hướng theo kiểm thử là một thành phần quan trọng của việc phát triểnphần mềm. Nếu mã lệnh không được kiểm thử, thì nó sẽ đổ vỡ. Tất cả mã lệnhphải được kiểm thử, và điều lý tưởng là các phép kiểm thử phải được viết trướckhi viết mã của mô hình. Nhưng có một số thứ dễ dàng được kiểm thử hơn nhữngthứ khác. Nếu bạn đang viết một lớp đơn giản để biểu diễn tiền tệ, thì rất dễ dàngđể kiểm thử rằng bạn có thể cộng $ 1.23 với 2.28 € và nhận được kết quả là $ 4.03và không phải là $ 3.03 hoặc $ 4,029999998. Ta cũng không gặp nhiều khó khănhơn để kiểm thử rằng ta không thể tạo ra một số tiền là $ 7.465. Nhưng làm thếnào để bạn kiểm thử phương thức quy đổi $ 7.50 thành 5.88 € - nhất là khi tỷ giáhối đoái được áp dụng bằng cách kết nối đến một cơ sở dữ liệu sống, với các thôngtin được cập nhật liên tục mỗi giây? Kết quả đúng của phương thứcamount.toEuros() có thể thay đổi mỗi khi bạn chạy chương trình.Câu trả lời là các đối tượng giả (mock objects). Thay vì kết nối với một máy chủthực cung cấp thông tin về tỷ giá được cập nhật mỗi phút, phép kiểm thử kết nốitới một máy chủ giả luôn luôn trả về cùng tỷ giá hối đoái. Thế thì bạn có một kếtquả dự đoán trước được mà bạn có thể kiểm thử. Sau cùng, mục tiêu là kiểm thửlôgic hoạt động trong phương thức toEuros() chứ không phải kiểm tra máy chủ cógửi đi các giá trị chính xác hay không. (Hãy để cho các nhà phát triển đã xây dựngmáy chủ lo việc này). Loại đối tượng giả này đôi khi được gọi là đồ giả (fake).Các đối tượng giả cũng có thể hữu ích cho việc kiểm thử các điều kiện lỗi. Ví dụ:Điều gì sẽ xảy ra nếu phương thức toEuros() cố gắng lấy ra tỷ giá mới nhất, khimạng bị hỏng? Bạn có thể tháo cáp mạng Ethernet khỏi máy tính của mình và sauđó chạy phép kiểm thử của bạn, nhưng ta sẽ không cần nhiều công sức để viết mộtđối tượng giả, mô phỏng một lỗi mạng.Các đối tượng giả cũng có thể được dùng để do thám hành vi của một lớp. Bằngcách đặt các xác nhận bên trong mã đối tượng giả, bạn có thể xác minh được rằngmã đang được kiểm thử chuyển các đối số đúng đắn cho các đối tượng cộng tácvới nó vào đúng thời điểm. Đối tượng giả có thể cho phép bạn xem và kiểm thửcác phần riêng tư (private) của một lớp mà không để lộ chúng ra qua các phươngthức công cộng không cần thiết khác.Cuối cùng, các đối tượng giả giúp loại bỏ khỏi phép kiểm thử các phụ thuộc cồngkềnh. Chúng làm cho các phép kiểm thử trở nên một đơn vị trọn vẹn hơn. Thất bạitrong phép kiểm thử dùng một đối tượng giả sẽ nhiều khả năng là thất bại trongphương thức đang được kiểm thử hơn là ở trong một phụ thuộc của nó. Điều nàygiúp cô lập vấn đề và làm cho việc gỡ lỗi trở nên đơn giản hơn.EasyMock là một thư viện đối tượng giả mã nguồn mở cho ngôn ngữ lập trìnhJava, giúp bạn nhanh chóng và dễ dàng tạo ra các đối tượng giả cho tất cả các mụcđích đó. Nhờ sự kỳ diệu của phép ủy nhiệm (proxy) động, EasyMock cho phépbạn tạo ra một triển khai thực hiện cơ sở của bất kỳ giao diện nào chỉ với mộtdòng mã lệnh. Bằng cách thêm phần mở rộng về lớp của EasyMock, bạn cũng cóthể tạo ra các cái làm giả (mocks) các lớp. Các giả lớp này có thể được cấu hìnhcho bất kỳ mục đích nào, từ các đối số giả đơn giản để điền vào một chữ kýphương thức đến các trình do thám đa triệu gọi (multi-invocation), nhằm xác minhmột dãy dài các cuộc gọi phương thức.Giới thiệu về EasyMockTôi sẽ bắt đầu bằng một ví dụ cụ thể để chứng tỏ EasyMock làm việc như thế nào.Liệt kê 1 là giao diện ExchangeRate giả định. Giống như bất kỳ giao diện nào, nóchỉ đơn giản nói lên những gì mà một cá thể làm chứ không chỉ rõ cá thể làm điềuđó như thế nào. Ví dụ: Nó không nói các dữ liệu về tỷ giá hối đoái đến từ trangYahoo finance, từ chính phủ, hay từ nơi nào khác.Liệt kê 1. Giao diện ExchangeRateimport java.io.IOException;public interface ExchangeRate { double getRate(String inputCurrency, String outputCurrency) throwsIOException;}Liệt kê 2 là bộ xương sườn của lớp Currency (tiền tệ) giả định. Nó thực sự kháphức tạp, và nó cũng có thể có lỗi. (Tôi tránh cho bạn khỏi phải hồi hộp: nó có lỗi– thực sự cũng kha khá lỗi)Liệt kê 2. Lớp Currencyimport java.io.IOException;public class Currency { private String units; private long amount; private int cents; public Currency(double amount, String code) { this.units = code; setAmount(amount); }private void setAmount(double amount) { ...

Tài liệu được xem nhiều: