Bài Viết Tóm Tắt Về Trường Hợp Sử Dụng của Buddy.Works với Thư Viện Mở CameraKit.
Sản Phẩm Đang Hoạt Động + Đội Ngũ Giàu Kinh Nghiệm + Các Doanh Nghiệp Đối Tác Lớn
Bounty | Website | Telegram | Whitepaper | Onepager | Twitter | Facebook
CameraKit là thư viện mã nguồn mở để hỗ trợ Android Camera 1 và 2 API. Mục tiêu chúng tôi là tăng mức độ ổn định và độ tin cậy của việc chụp ảnh và quay video trên tất cả các thiết bị Android với thư viện tập trung vào developer và dễ triển khai.
Trong bài này, tôi sẽ giới thiệu các kỹ thuật và thách thức mà tôi gặp phải khi thiết lập một bộ unit test cho ứng dụng CameraKit.
Phần 1. Tại sao phải unit test
Nguồn: https://developer.android.com/training/testing/fundamentals
Nếu trước đây bạn chưa viết các thử nghiệm code của mình thì không quá muộn để bắt đầu! Thử nghiệm phải là yếu tố chính trong quy trình làm việc của mỗi developer. Nó không chỉ đảm bảo các hàm (function) và lớp (class) của bạn hoạt động như mong muốn, mà còn khuyến khích thiết kế các hàm và lớp đó sạch hơn.
Viết unit test là một nơi tuyệt vời để bắt đầu. Không giống như các thử nghiệm tích hợp, unit test không phụ thuộc vào các yếu tố phụ thuộc bên ngoài có thể làm tăng thêm độ phức tạp cho các thử nghiệm của bạn.
Phần 2. Môi trường thử nghiệm
Bạn có thể xem code của CameraKit ở đây: https://github.com/CameraKit/camerakit-android
Để tạo ra các unit test bạn dùng các framework sau:
• JUnit
• Mockito
Các yếu tố phụ thuộc và tùy chọn thử nghiệm như bên dưới.
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
}
buildToolsVersion '27.0.3'
testOptions {
unitTests.returnDefaultValues = true
}
}
dependencies {
implementation 'com.camerakit:jpegkit:0.1.0'
implementation 'com.android.support:support-annotations:27.1.0'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:1.10.19'
}
JUnit và Mockito lần lượt là unit test chuẩn và framework giả lập. Mỗi cái đều có hỗ trợ cộng đồng tuyệt vời và vô số kiến thức nếu bạn gặp phải vấn đề.
Phần 3. Thử nghiệm
Phần cốt lõi của chức năng CameraKit được chứa trong lớp CameraKitView. Lớp này khá phức tạp và có các hàm và đối tượng tương tác với các phần tử khác nhau của Camera 1 và 2 API.
File CameraKitViewTest.java được chia thành nhiều phần khác nhau.
Đầu tiên, mỗi yếu tố phụ thuộc của CameraKitView được giả lập, chẳng hạn như: Context, AttributeSet, GestureListener, v.v. Chúng tôi muốn có thể thử nghiệm các phương thức (method) một cách riêng biệt. Giả lập hiệu quả ẩn sự phức tạp của các dịch vụ và phương thức từ các lớp khác.
Tiếp theo, một hàm cài đặt được chạy để tạo các đối tượng thực và giả lập toàn bộ các lệnh gọi hàm đã gặp trong các thử nghiệm.
Cuối cùng đến các unit test. Mỗi unit test sẽ thực hiện cho một hàm công khai ngắn cụ thể của lớp CameraKitView. Assert được sử dụng để đảm bảo rằng hàm trả về giá trị mong muốn và sẽ hoạt động đúng khi được sử dụng trong các tình huống thực tế.
@test
public void toggleFacingTest() {
cameraKitView.setFacing(CameraKit.FACING_BACK);
cameraKitView.toggleFacing();
assertEquals(cameraKitView.getFacing(), CameraKit.FACING_FRONT);
}
Dưới đây là ví dụ về thử nghiệm hàm toggleFacing. Như có thể tưởng tượng, hàm chuyển hướng quay của máy ảnh dựa trên trạng thái hiện tại của nó. Hướng quay được đặt theo một hướng, bật, và sau đó assert được sử dụng để đảm bảo đã xảy ra.
Phần 4. Tích hợp với Buddy
Buddy.works là một nền tảng để tạo ra môi trường thử nghiệm và quy trình triển khai và đi kèm với hỗ trợ native docker. Buddy không chỉ là giải pháp tuyệt vời để thử nghiệm và triển khai mà còn là nhà tài trợ cho CameraKit! Chúng tôi đã chuyển từ CircleCI sang Buddy cho v1.0.0.
Nguồn: https://buddy.works
Với hỗ trợ Native Docker, việc thiết lập Buddy thật dễ dàng. Chỉ cần định cấu hình môi trường bằng hình ảnh docker từ DockerHub và bạn có thể chạy thử nghiệm miễn phí. Tôi đã sử dụng testcommand ./gradlew để tải xuống các yếu tố phụ thuộc Android và chạy thử nghiệm. Hình ảnh docker được tạo bởi Dylan McIntyre cho dự án này.
Quy trình CameraKit được thiết lập để chạy trên mỗi lần đưa vào kho lưu trữ GitHub bằng cách sử dụng các webhook Buddy được tích hợp sẵn.
Phần 5. Thách thức và những điều sắp tới
Có một loại đối tượng khác trong lớp CameraKitView mà tôi không thể thử nghiệm bằng unit test; lớp abstract CameraPreview và triển khai Camera1 và Camera2. Các lớp này là riêng tư đối với CameraKitView và chỉ có thể được tạo với quyền và điều kiện thiết bị Android phù hợp. Để thiết lập quyền và điều kiện, bạn cần một thiết bị Android được mô phỏng gọi các thử nghiệm có thiết bị đo! Các thử nghiệm này sẽ yêu cầu thiết lập nhiều hơn trong Buddy để mô phỏng một thiết bị trong môi trường docker. Mặc dù chưa sẵn sàng phát hành bản 1.0.0 ổn định, các thử nghiệm có thiết bị đo sẽ sớm ra mắt.
Ngoài ra, có rất nhiều nhiệm vụ mà Buddy có thể thực hiện cho các kết quả thử nghiệm khác nhau. Ví dụ, chúng tôi có thể gửi thông báo hoặc ngừng thay đổi khi chuyển sang sản xuất nếu các thử nghiệm không được thông qua. Những tính năng này sẽ giúp tăng tốc quá trình phát triển và cho phép chúng tôi đưa thêm nhiều tính năng và đóng góp từ cộng đồng.
Hãy theo dõi các bài đăng sắp tới khi chúng tôi tiếp tục cải thiện CameraKit!
Buddy là dự án thực sự tiềm năng, các bạn nhớ đón đọc thêm các bài viết tiếp theo về dự án nhé.
Bài viết phân tích được thực hiện bởi Shibob đến từ diễn đàn Bitcointalk.
Bitcointalk Profile: https://bitcointalk.org/index.php?action=profile;u=1107745
Sản Phẩm Đang Hoạt Động + Đội Ngũ Giàu Kinh Nghiệm + Các Doanh Nghiệp Đối Tác Lớn
Bounty | Website | Telegram | Whitepaper | Onepager | Twitter | Facebook
CameraKit là thư viện mã nguồn mở để hỗ trợ Android Camera 1 và 2 API. Mục tiêu chúng tôi là tăng mức độ ổn định và độ tin cậy của việc chụp ảnh và quay video trên tất cả các thiết bị Android với thư viện tập trung vào developer và dễ triển khai.
Trong bài này, tôi sẽ giới thiệu các kỹ thuật và thách thức mà tôi gặp phải khi thiết lập một bộ unit test cho ứng dụng CameraKit.
Phần 1. Tại sao phải unit test
Nguồn: https://developer.android.com/training/testing/fundamentals
Nếu trước đây bạn chưa viết các thử nghiệm code của mình thì không quá muộn để bắt đầu! Thử nghiệm phải là yếu tố chính trong quy trình làm việc của mỗi developer. Nó không chỉ đảm bảo các hàm (function) và lớp (class) của bạn hoạt động như mong muốn, mà còn khuyến khích thiết kế các hàm và lớp đó sạch hơn.
Viết unit test là một nơi tuyệt vời để bắt đầu. Không giống như các thử nghiệm tích hợp, unit test không phụ thuộc vào các yếu tố phụ thuộc bên ngoài có thể làm tăng thêm độ phức tạp cho các thử nghiệm của bạn.
Phần 2. Môi trường thử nghiệm
Bạn có thể xem code của CameraKit ở đây: https://github.com/CameraKit/camerakit-android
Để tạo ra các unit test bạn dùng các framework sau:
• JUnit
• Mockito
Các yếu tố phụ thuộc và tùy chọn thử nghiệm như bên dưới.
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
}
buildToolsVersion '27.0.3'
testOptions {
unitTests.returnDefaultValues = true
}
}
dependencies {
implementation 'com.camerakit:jpegkit:0.1.0'
implementation 'com.android.support:support-annotations:27.1.0'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:1.10.19'
}
JUnit và Mockito lần lượt là unit test chuẩn và framework giả lập. Mỗi cái đều có hỗ trợ cộng đồng tuyệt vời và vô số kiến thức nếu bạn gặp phải vấn đề.
Phần 3. Thử nghiệm
Phần cốt lõi của chức năng CameraKit được chứa trong lớp CameraKitView. Lớp này khá phức tạp và có các hàm và đối tượng tương tác với các phần tử khác nhau của Camera 1 và 2 API.
File CameraKitViewTest.java được chia thành nhiều phần khác nhau.
Đầu tiên, mỗi yếu tố phụ thuộc của CameraKitView được giả lập, chẳng hạn như: Context, AttributeSet, GestureListener, v.v. Chúng tôi muốn có thể thử nghiệm các phương thức (method) một cách riêng biệt. Giả lập hiệu quả ẩn sự phức tạp của các dịch vụ và phương thức từ các lớp khác.
Tiếp theo, một hàm cài đặt được chạy để tạo các đối tượng thực và giả lập toàn bộ các lệnh gọi hàm đã gặp trong các thử nghiệm.
Cuối cùng đến các unit test. Mỗi unit test sẽ thực hiện cho một hàm công khai ngắn cụ thể của lớp CameraKitView. Assert được sử dụng để đảm bảo rằng hàm trả về giá trị mong muốn và sẽ hoạt động đúng khi được sử dụng trong các tình huống thực tế.
@test
public void toggleFacingTest() {
cameraKitView.setFacing(CameraKit.FACING_BACK);
cameraKitView.toggleFacing();
assertEquals(cameraKitView.getFacing(), CameraKit.FACING_FRONT);
}
Dưới đây là ví dụ về thử nghiệm hàm toggleFacing. Như có thể tưởng tượng, hàm chuyển hướng quay của máy ảnh dựa trên trạng thái hiện tại của nó. Hướng quay được đặt theo một hướng, bật, và sau đó assert được sử dụng để đảm bảo đã xảy ra.
Phần 4. Tích hợp với Buddy
Buddy.works là một nền tảng để tạo ra môi trường thử nghiệm và quy trình triển khai và đi kèm với hỗ trợ native docker. Buddy không chỉ là giải pháp tuyệt vời để thử nghiệm và triển khai mà còn là nhà tài trợ cho CameraKit! Chúng tôi đã chuyển từ CircleCI sang Buddy cho v1.0.0.
Nguồn: https://buddy.works
Với hỗ trợ Native Docker, việc thiết lập Buddy thật dễ dàng. Chỉ cần định cấu hình môi trường bằng hình ảnh docker từ DockerHub và bạn có thể chạy thử nghiệm miễn phí. Tôi đã sử dụng testcommand ./gradlew để tải xuống các yếu tố phụ thuộc Android và chạy thử nghiệm. Hình ảnh docker được tạo bởi Dylan McIntyre cho dự án này.
Quy trình CameraKit được thiết lập để chạy trên mỗi lần đưa vào kho lưu trữ GitHub bằng cách sử dụng các webhook Buddy được tích hợp sẵn.
Phần 5. Thách thức và những điều sắp tới
Có một loại đối tượng khác trong lớp CameraKitView mà tôi không thể thử nghiệm bằng unit test; lớp abstract CameraPreview và triển khai Camera1 và Camera2. Các lớp này là riêng tư đối với CameraKitView và chỉ có thể được tạo với quyền và điều kiện thiết bị Android phù hợp. Để thiết lập quyền và điều kiện, bạn cần một thiết bị Android được mô phỏng gọi các thử nghiệm có thiết bị đo! Các thử nghiệm này sẽ yêu cầu thiết lập nhiều hơn trong Buddy để mô phỏng một thiết bị trong môi trường docker. Mặc dù chưa sẵn sàng phát hành bản 1.0.0 ổn định, các thử nghiệm có thiết bị đo sẽ sớm ra mắt.
Ngoài ra, có rất nhiều nhiệm vụ mà Buddy có thể thực hiện cho các kết quả thử nghiệm khác nhau. Ví dụ, chúng tôi có thể gửi thông báo hoặc ngừng thay đổi khi chuyển sang sản xuất nếu các thử nghiệm không được thông qua. Những tính năng này sẽ giúp tăng tốc quá trình phát triển và cho phép chúng tôi đưa thêm nhiều tính năng và đóng góp từ cộng đồng.
Hãy theo dõi các bài đăng sắp tới khi chúng tôi tiếp tục cải thiện CameraKit!
Buddy là dự án thực sự tiềm năng, các bạn nhớ đón đọc thêm các bài viết tiếp theo về dự án nhé.
Bài viết phân tích được thực hiện bởi Shibob đến từ diễn đàn Bitcointalk.
Bitcointalk Profile: https://bitcointalk.org/index.php?action=profile;u=1107745