Chào các bạn, mấy bài trước tôi có hướng dẫn các bạn làm auto layout trên iOS, nếu bạn nào chưa đọc thì có thể xem lại tại đây. Vậy sau khi làm auto layout xong các bạn có tự tin rằng nó đã thực sự chạy tốt và không có bug xảy ra?
Các bạn có thể viết unit test cho phần logic rất dễ dàng nếu các bạn chia những code xử lý logic thành từng hàm có input và output rõ ràng, công việc này rất là tốt. Nếu sau này các bạn viết thêm những đoạn code khác hoặc fix bug khác làm logic đó sai, bạn có thể chạy unit test để phát hiện ra lỗi ngay. Một khi bạn làm unit test tốt và độ bao phủ cao thì số bug chắc chắn sẽ ít và thời gian bạn test bằng tay cũng giảm đi nhiều, và bạn sẽ rất tự tin khi nói với khách hàng của bạn rằng: code của mình sẽ không sinh những bug vặt.
Nhưng mặt hạn chế trước giờ mình gặp phải là mình chỉ có thể viết unit test cho phần logic, còn phần layout thì mặc định công cụ XCode chưa hỗ trợ nhiều, thành ra số bug mình khó thấy và không test kỹ được là phần layout trên những loại thiết bị khác nhau. Những bug về layout tuy nhỏ nhưng cũng rất là khó chịu, đa số các công ty lớn cũng đau đầu vì chuyện này, thành ra công ty Linkedin đã hỗ trợ viết ra 1 thư viện giúp cho các bạn phát hiện ra những bug về layout 1 cách dễ dàng và nhanh chóng đó chính là thư viện LayoutTest-iOS. Tôi đáng giá cao thư viện này thành ra hôm nay tôi sẽ giới thiệu cho các bạn cách xài cũng như có cái nhìn tổng quát về như viện này.
Mình yêu thích ngôn ngữ Objective-C, Swift, Javascript và chia sẻ kiến thức lập trình trên iOS và Node.js, AWS, GCP. Các bạn thấy hay hãy nhấn +1 ủng hộ mình nhé (^.-).
Showing posts with label Unit Test. Show all posts
Showing posts with label Unit Test. Show all posts
Thursday, April 19, 2018
Tuesday, December 29, 2015
(CI) Jenkins PMD report for Objective-C with OCLint
OCLint is a static code analysis tool for improving quality and reducing defects by inspecting C, C++ and Objective-C code and looking for potential problems like:
- Possible bugs - empty if/else/try/catch/finally statements
- Unused code - unused local variables and parameters
- Complicated code - high cyclomatic complexity, NPath complexity and high NCSS
- Redundant code - redundant if statement and useless parentheses
- Code smells - long method and long parameter list
- Bad practices - inverted logic and parameter reassignment
- ...
Installation:
- Step 1: Download "oclint-0.x.x-x86_64-darwin-15.0.0.tar" from the downloads page. Unzip this file and see as below:
- Step 2: Copying OCLint to System PATH. Open Terminal prompt, and input some commands lines as follows:
$ cd /Downloads/oclint-0.10.x
$ cp bin/oclint* /usr/local/bin/
$ cp -rp lib/* /usr/local/lib/
Other option: Directly adding to PATH at here.
oclint directly from there and expect message similar to below:$ oclint
oclint: Not enough positional command line arguments specified!
Must specify at least 1 positional arguments: See: oclint -help
Wednesday, December 23, 2015
Improve Unit Test with OCMock
Adding OCMock to your project:
- Step 1: Download a release from the downloads page.
- Step 2: Setup OCMock from the iOS page.
- Step 3: Add an import to your unit tests.
#import <OCMock/OCMock.h>
Contents:
Tuesday, November 10, 2015
(Unit Test) Những luật cần thiết để viết unit test
Trước giờ mình làm những dự án trên iOS ít khi nào khách hàng đòi hỏi mình phải viết unit test cho họ. Hiện tại mình cũng đang tập viết unit test trên iOS nên có vài kinh nghiệm khi nghiên cứu về nó, nếu bạn nào có kinh nghiệm nào khác xin chia sẻ tại đây để chúng ta có thể tìm ra hướng giải quyết tốt nhất.
- Khái niệm unit test: Unit test là một đơn vị kiểm tra tự động nhỏ, được viết bởi người lập trình viên để kiểm tra những dòng code của ứng dụng thực tế, chúng phải được viết một cách độc lập.
- 5 luật đơn giản nên tuân theo trước khi viết unit test là F.I.R.S.T. Chữ này được viết tắt của những chữ như:
- https://pragprog.com/magazines/2012-01/unit-tests-are-first
- Khái niệm unit test: Unit test là một đơn vị kiểm tra tự động nhỏ, được viết bởi người lập trình viên để kiểm tra những dòng code của ứng dụng thực tế, chúng phải được viết một cách độc lập.
- 5 luật đơn giản nên tuân theo trước khi viết unit test là F.I.R.S.T. Chữ này được viết tắt của những chữ như:
- Fast — nhanh: Unit test phải chạy thường xuyên, do đó cần phải viết sao cho chạy nhanh.
- Isolated — tách biệt: Unit test không nên phụ thuộc vào các yếu tố bên ngoài, hoặc kết quả của unit test này phụ thuộc vào kết quả của unit test khác.
- Repeatable — lặp lại: Unit test phải trả ra cùng kết quả mỗi khi chúng được thực thi.
- Self-verifying — tự kiểm tra: Unit test phải dùng những hàm tự kiểm tra kết quả, không phụ thuộc vào yếu tố con người.
- Timely — hợp thời: Unit test nên được viết với code chạy thực tế. Viết test trước hay sau khi viết code thực tế?
- Trước khi bạn viết 1 hàm hay trước khi viết unit test bạn nên suy nghĩ và viết trước những trường hợp test (Todo list) của hàm này, để có cái nhìn bao quát nhất mỗi khi bạn viết test case và để không bị sót trường hợp nào. Luật như sau: T . S . W
- Những test case nào liên quan đến database hay connection thì gọi là integration testing. Vì thế bạn có thể viết tên hàm test có đánh số thứ tự để có thể chạy test theo mức độ ưu tiên. Nếu bạn test database bạn phải đảm bảo dữ liệu phải rollback trở lại. Ví dụ những hàm như sau:- Test + tên hàm hay chức năng
- Should return + true (false), giá trị (value)
- When input + giá trị
- test1CreateDatabase
- test2InsertItem
- test3UpdateItem
- test4DeleteItem
Tài liệu tham khảo:
- https://www.objc.io/issues/15-testing/bad-testing-practices/#good-practices-101- https://pragprog.com/magazines/2012-01/unit-tests-are-first
Thursday, October 15, 2015
(CI) Giới thiệu tổng quan về XCode server
Hiện tại mình dùng XCode 7 không để nào dùng tool Frankencover để generate ra code coverage được. Vì thế giải pháp hiện tại mình chuyển sang dùng XCode server để có thể thay thế Jenkins.
- Điểm mạnh của XCode server: là bạn có thể chạy test trên nhiều thiết bị và hệ điều hành khác nhau. Có thể analyze, code coverage, archive build. Có thể cài ứng dụng thông qua xcode server và OTA. Vừa build và chạy code ở local và cả trên server cùng thời điểm được.
- Điểm yếu: là vẫn chưa hỗ trợ những tool kiểm tra chất lượng code (code metric, duplicate code, checkstyle ...).
Để sử dụng được XCode Server bạn phải cài OS server để tạo máy chủ. Bạn có thể cài đặt OS server và XCode Server tại đây. Hướng dẫn cài của Apple rất chi tiết và dễ, các bạn hãy đọc và làm theo.
Hiện tại mình đang dùng bản Beta để sử dụng thử, bạn có thể mua ứng dụng này với giá 19.9$ tại app store.
Sau khi cài xong sẽ xuất hiện như những màn hình sau:
- Điểm mạnh của XCode server: là bạn có thể chạy test trên nhiều thiết bị và hệ điều hành khác nhau. Có thể analyze, code coverage, archive build. Có thể cài ứng dụng thông qua xcode server và OTA. Vừa build và chạy code ở local và cả trên server cùng thời điểm được.
- Điểm yếu: là vẫn chưa hỗ trợ những tool kiểm tra chất lượng code (code metric, duplicate code, checkstyle ...).
Để sử dụng được XCode Server bạn phải cài OS server để tạo máy chủ. Bạn có thể cài đặt OS server và XCode Server tại đây. Hướng dẫn cài của Apple rất chi tiết và dễ, các bạn hãy đọc và làm theo.
Hiện tại mình đang dùng bản Beta để sử dụng thử, bạn có thể mua ứng dụng này với giá 19.9$ tại app store.
Sau khi cài xong sẽ xuất hiện như những màn hình sau:
(CI) Quản lý chất lượng code của iOS trên Jenkins (CPD, PMD, CheckStyle, Code Coverage)
Jenkins có hỗ trợ những công cụ để kiểm tra chất lượng code của bạn như kiểm tra duplicated code, checkstyle, code coverage...
Wednesday, October 7, 2015
(Code Coverage) Hướng dẫn bật tính năng Code Coverage trên XCode 7
Nếu bạn dùng XCode 7 bạn có thể sử dụng chức năng Code Coverage trên XCode 7. Mình cũng có bài hướng dẫn generate code coverage bằng XCode 6 tại đây. Hiện tại mình chạy code cũ từ XCode 6 qua XCode 7 có problem khi project của mình dùng static library mình có nêu vấn đề tại đây.
Sau đây mình xin hướng dẫn cách bật chức năng code coverage trên XCode 7.
Bước 1: Kiểm tra thuộc tính Build Active Architecture Only trong Build Settings là YES:
(Code Coverage) Không thể chạy code coverage trên XCode 7 cho Static Library.
Hiện tại nếu project của bạn đang dùng static library (có thiết lập thuộc tính "Build Active Architecture Only" là YES) thì bạn chắc chắn sẽ không dùng được cơ chế generate code coverage của XCode 7.
Nguồn tham khảo:
- https://forums.developer.apple.com/thread/5925
- https://github.com/CocoaPods/CocoaPods/issues/3706
Những thuộc tính (Generate Legacy Test Coverage Files, Instrument Program Flow) để là YES hay NO không ảnh hưởng đến việc generate code coverage trên XCode 7:
Hiện tại mình đang thử tìm cách hướng giải quyết. Khi nào có mình sẽ update tài liệu này sau.
- https://forums.developer.apple.com/thread/5925
- https://github.com/CocoaPods/CocoaPods/issues/3706
Thursday, September 24, 2015
(BBD) UI Testing trên iOS 9 và XCode 7
UI Testing (User Interface Testing) còn được gọi là BDD (behavior-driven development) hay Test Automation. Nói tóm lại khi nào bạn sử dụng UI Testing vào dự án bạn đang làm? Theo Apple thì những tiêu chí dưới đây sẽ cần để ứng dụng UI Testing:
- Bổ sung thêm Unit Test cho kịch bản (scenario) hay hành động (actions) mà bạn thường xuyên phải làm hay luồng quan trọng của dự án (important application flow).
- Bổ sung thêm tính chính xác cho hệ thống.
- Có thể bao khối hết những khía cạnh của test chức năng (functionality unit test).
Vì thế tuỳ theo từng dự án bạn làm cần chất lượng cao hơn thì bạn nên ứng dụng UI Testing và để luôn luôn đảm bảo hệ thống bạn chạy một cách chính xác và đúng đắn.
Trước khi Apple giới thiệu UI Testing trong WWDC 2015 thì cũng có những framework có thể làm được như vậy như:
- UIAutomation: của Apple phát triển, viết bằng ngôn ngữ javascript. Viết code trên này rất bất tiện.
- Cedar: làm việc trên Ruby on Rails. Theo tác giả của trang blog này đánh giá framework này rất tốt. Mình chưa thử sử dụng nhưng theo kinh nghiệm mình làm trước giờ mấy framework mà không do Apple phát triển có thể mỗi lần update iOS mới có thể sẽ không dùng được. Vì thể mình hay ưu tiên dùng những gì do Apple phát triển, nếu Apple chưa hỗ trợ mình mới dùng framework ở ngoài.
- Frank: từ lâu rồi không còn hỗ trợ nữa.
- KIF: bị phá vỡ mỗi phiên bản mới iOS.
- Subliminal: Không chạy ổn định bằng dòng lệnh (command line).
Sau đây mình sẽ giới thiệu cách sử dụng UI Testing trên XCode 7.
Bạn muốn sử dụng UI Testing thì phải dùng XCode 7 và ứng dụng phải viết trên iOS 9 hoặc OS X 10.11.
3 đối tượng chính được thêm vào XCTest mà bạn cần quan tâm là:
- XCUIApplication
- XCUIElement
- XCUIElementQuery
Bước 1: Khởi tạo dự án tên "UITestingDemo", mình chọn viết bằng ngôn ngữ Objective-C (Swift tương tự như vậy) và check vào "Include UI Tests" như sau:
- Bổ sung thêm Unit Test cho kịch bản (scenario) hay hành động (actions) mà bạn thường xuyên phải làm hay luồng quan trọng của dự án (important application flow).
- Bổ sung thêm tính chính xác cho hệ thống.
- Có thể bao khối hết những khía cạnh của test chức năng (functionality unit test).
Vì thế tuỳ theo từng dự án bạn làm cần chất lượng cao hơn thì bạn nên ứng dụng UI Testing và để luôn luôn đảm bảo hệ thống bạn chạy một cách chính xác và đúng đắn.
Trước khi Apple giới thiệu UI Testing trong WWDC 2015 thì cũng có những framework có thể làm được như vậy như:
- UIAutomation: của Apple phát triển, viết bằng ngôn ngữ javascript. Viết code trên này rất bất tiện.
- Cedar: làm việc trên Ruby on Rails. Theo tác giả của trang blog này đánh giá framework này rất tốt. Mình chưa thử sử dụng nhưng theo kinh nghiệm mình làm trước giờ mấy framework mà không do Apple phát triển có thể mỗi lần update iOS mới có thể sẽ không dùng được. Vì thể mình hay ưu tiên dùng những gì do Apple phát triển, nếu Apple chưa hỗ trợ mình mới dùng framework ở ngoài.
- Frank: từ lâu rồi không còn hỗ trợ nữa.
- KIF: bị phá vỡ mỗi phiên bản mới iOS.
- Subliminal: Không chạy ổn định bằng dòng lệnh (command line).
Sau đây mình sẽ giới thiệu cách sử dụng UI Testing trên XCode 7.
Bạn muốn sử dụng UI Testing thì phải dùng XCode 7 và ứng dụng phải viết trên iOS 9 hoặc OS X 10.11.
3 đối tượng chính được thêm vào XCTest mà bạn cần quan tâm là:
- XCUIApplication
- XCUIElement
- XCUIElementQuery
Bước 1: Khởi tạo dự án tên "UITestingDemo", mình chọn viết bằng ngôn ngữ Objective-C (Swift tương tự như vậy) và check vào "Include UI Tests" như sau:
Friday, May 22, 2015
(CI) Hướng dẫn thiết lập Jenkins cho dự án về iOS trên GitHub
Thiết lập Jenkins cho dự án về iOS trên GitHub
Jenkins là một server continuous integration, theo mã nguồn mở vì thế bạn có thể dễ dàng sử dụng và tuỳ chỉnh theo ý bạn. Trang chủ của Jenkins tại đây.Sau đây là hướng dẫn của mình khi bạn cài đặt Jenkins cho dự án về iOS trên Yosemite.
Cách cài đặt Jenkins:
Bạn vào trang chủ của Jenkins và download gói jenkins theo từng môi trường và cài đặt chúng trên máy của bạn:Thursday, May 14, 2015
(CI) Hướng dẫn thiết lập Travis CI cho iOS
- Travis CI là gì?
- Travis CI là Continuous Integration, miễn phí và open source trên GitHub. Dùng để build project và chạy những unit test để báo cho người quản lý biết mỗi khi bạn pull và push code lên GitHub. Rất hữu ích khi project của bạn có dùng unit test, và tự tin mỗi khi release một phiên bản nào đó.
Trang này cho phép đánh giá những dự án đang làm với công nghệ này, bạn có thể xem qua những đánh giá giữa Jenkins, Travis CI và Circle CI tại đây. Travis CI hỗ trợ chạy trên iOS đơn giản, tích hợp sẵn trên GitHub, vì thế mọi người dùng iOS thích dùng Travis CI.
Thursday, May 7, 2015
(Code Coverage) Hướng dẫn thiết lập Code Coverage cho iOS
- Code coverage là gì?
- Code coverage là cách kiểm tra những chức năng bạn đã làm có viết Unit Test hay chưa và đã viết qua những đoạn code nào rồi. Bạn có thể kiểm tra bằng mắt thường nhưng chỉ với 1 project nhỏ, vì thế thông qua Frankencover bạn có thể tạo những báo cáo của code coverage bằng những file html và có màu sắc cho từng dòng và phương thức để dễ dàng kiểm tra 1 cách nhanh chóng và dễ dàng. Ngoài cách này ra có nhiều cách khác bạn có thể tìm hiểu thêm trên mạng.
- Code coverage là cách kiểm tra những chức năng bạn đã làm có viết Unit Test hay chưa và đã viết qua những đoạn code nào rồi. Bạn có thể kiểm tra bằng mắt thường nhưng chỉ với 1 project nhỏ, vì thế thông qua Frankencover bạn có thể tạo những báo cáo của code coverage bằng những file html và có màu sắc cho từng dòng và phương thức để dễ dàng kiểm tra 1 cách nhanh chóng và dễ dàng. Ngoài cách này ra có nhiều cách khác bạn có thể tìm hiểu thêm trên mạng.
Subscribe to:
Posts (Atom)









