+1

Test Double trong iOS

Mở đầu

Trong một dự án iOS, nếu chúng ta muốn dễ dàng viết code thì ngay từ ban đầu, các class phải chia nhỏ ra độc lập với nhau. Và sau đó chúng ta sẽ dễ dàng viết test cho từng phần một. Từ đó, sẽ có những trường hợp mà chúng ta cần phải có đầy đủ các phần liên quan để test, hoặc là muốn test một phần, nhưng các phần liên quan lại chưa làm xong, hay là dữ liệu chưa được hoàn thiện .... Thì tất cả những vấn đề đó sẽ được giải quyết dựa vào Test Double

Có rất nhiều loại Test Double, nhưng để hiểu rõ hơn, bạn có thể hình dung nó cũng là một module nhưng đã bị lược gọn đi, chỉ để lại các thành phần cốt yếu, sử dụng để hỗ trợ test các module khác. Tuỳ thuốc vào mục đích test, chúng ta sẽ tạo ra các mudule giản lược đó.

Dummy

Dummy là việc bạn tạo ra một objective nhưng không dùng đến, ngoại trừ việc để combile code.

Ví dụ:

Giả sử bây giờ chúng ta sẽ test tính đúng đắn của biến area:

Tuy nhiên, việc khởi tạo yêu cầu bạn bắt buộc phải có 1 protocol là SaverProtocol, mặc dù ở test case này, bạn chẳng dùng cái protocol đấy để làm gì cả. Vì vậy chúng ta sẽ tạo ra một cái DummySaver() chỉ để đủ thành phần để chạy function test mà thôi.

Fake

Fake là một object đã được implement, nhưng giản lược so với cái gốc. Chúng ta chỉ để lại cái mà chúng ta dùng trong test case đó, còn những phần khác sẽ lược bỏ. Nhằm tăng tốc độ test và giảm độ phức tạp khi test.

Ví dụ:

Test tính đúng đắn của countMessage()

Thay vì thực hiện gọi truy vấn data như thực tế, chúng ta sẽ fake giá trị trả về trong fetchUsers của fakeUserService. Đó chính là cách để chúng ta làm đơn giản đi mà vẫn đạt hiệu qủa như bình thường.

Stub

Stub là object được tạo ra để thay thế một chức năng cụ thể để chúng ta gọi và sử dụng khi test.

Ví dụ:

Bây giờ chúng ta sẽ test usersCountMessage(), sử dụng UsersServiceProtocol. Để thực hiện, chúng ta sẽ tạo ra một StubUsersService:

Thoạt đầu, nhìn có vẻ giống fake, nhưng điểm khác biệt của stub là nó là một chức năng cụ thể hoàn chỉnh, không có hard code bên trong mà dữ liệu sẽ truyền từ ngoài vào.

Spy

Spy là một phiên bản mạnh mẽ hơn Stub, nó sẽ cung cấp thông tin về cách thức hàm được gọi và gọi bao nhiêu lần.

Dùng lại ví dụ của Dummy:

Bây giờ chúng ta sẽ test xem hàm save() được gọi bao nhiêu lần, và giá trị saveValue có đúng không:

Mock

Nhìn lại ví dụ về Spy, sẽ có lúc trong hàm test của bạn sẽ có rất nhiều biến cần test. Việc test sẽ trở nên khó khăn và bạn phải tạo ra nhiều cái SpySaver()

Vì vậy, Mock sẽ làm sạch code của bạn trong trường hợp nâng cao này.

Từ ví dụ của Spy,

Chúng ta đưa assert vào trong hàm verify():

Trên đây là bài chia sẻ của mình về Test Double trong iOS, hi vọng sẽ giúp ích cho các bạn. Cảm ơn các bạn đã đọc bài viết của mình !


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí