thắc mắc cách tạo bộ test case cho unit test

gaconkute

Junior Member
Hi bác, em muốn hỏi cách để tạo bộ test case cover toàn bộ tất cả các case có thể có của 1 chức năng, đây là lần đầu em viết test ạ. Phía sếp giao cho 1 chức năng và bắt viết cả unit test nữa. Ví dụ em có 1 API đầu vào là ID câu hỏi, response là câu hỏi và list các đáp án(multiple choices) ạ. Em suy nghĩ thì có : case 1 :ID chính xác, case 2 : Không có ID, case 3: ID bị vượt limit cho phép gây tràn memory, case 4 là ID = null nhưng vẫn thấy thiếu thiếu. Thank các bác
 

logachune

Senior Member
Hi bác, em muốn hỏi cách để tạo bộ test case cover toàn bộ tất cả các case có thể có của 1 chức năng, đây là lần đầu em viết test ạ. Phía sếp giao cho 1 chức năng và bắt viết cả unit test nữa. Ví dụ em có 1 API đầu vào là ID câu hỏi, response là câu hỏi và list các đáp án(multiple choices) ạ. Em suy nghĩ thì có : case 1 :ID chính xác, case 2 : Không có ID, case 3: ID bị vượt limit cho phép gây tràn memory, case 4 là ID = null nhưng vẫn thấy thiếu thiếu. Thank các bác
học thêm khóa testing đi fen ơi
 

hardcoreholly

Senior Member
bác cho em tên full khóa với, thật sự em mới nhảy việc mà bọn product này nó chuối vcl, làm dev bắt đi viết test ạ. Em chưa bao giờ viết test luôn
Có mà ông chuối ấy, Dev ko viết unit tests thì thằng nào viết :surrender: Còn unit tests thì viết cover các trường hợp có thể xảy ra, mai mốt có sửa code thì có unit tests nó đảm bảo function của ông nó ko bị lỗi, hoặc apply TDD luôn

https://www.guru99.com/test-driven-development.html
 

Kurisu Makise

Senior Member
Unit test là để kiểm tra lại detail design
Bạn xem trong detail design có main + alt behavior như nào thì viết unit test theo như vậy
 

Thất học

Senior Member
bác cho em tên full khóa với, thật sự em mới nhảy việc mà bọn product này nó chuối vcl, làm dev bắt đi viết test ạ. Em chưa bao giờ viết test luôn
Có ông chuối thì có, thợ code mới không viết unitest, chứ đã làm dev thì bắt buộc phải viết unitest. Viết unitest là hạn chế thời gian phải ngồi fix bug nhất có thể.
 

gaconkute

Junior Member
Có ông chuối thì có, thợ code mới không viết unitest, chứ đã làm dev thì bắt buộc phải viết unitest. Viết unitest là hạn chế thời gian phải ngồi fix bug nhất có thể.
đù, em làm outsource 3 năm nay nói thật em chỉ code, còn tester mới phải test, nay qua product làm nó bắt viết test ạ
 

Thất học

Senior Member
đù, em làm outsource 3 năm nay nói thật em chỉ code, còn tester mới phải test, nay qua product làm nó bắt viết test ạ
Môi trường product nó khác outsource chỗ đó đấy fen, chỗ t làm đám intern đã phải tập viết unitest rồi. Vì outsource là nó bắt fen code càng nhanh càng tốt cho kịp bàn giao với khách hàng, còn product thì sản phẩm chính kinh doanh lâu dài của công ty nên phải viết unitest, kỹ chút, đôi khi phải code đẹp chút cho dễ bảo trì, chứ viết như đống bùi nhùi đặt tên hàm biến không theo 1 quy tắc gì hết thì khổ mấy thằng code sau vl, ngồi đọc lác cả mắt.
 

gaconkute

Junior Member
các fen thường viết Unit test với Junit hay Automation test với selenium, khi nào viết unit và khi nào auto vậy thím
Môi trường product nó khác outsource chỗ đó đấy fen, chỗ t làm đám intern đã phải tập viết unitest rồi. Vì outsource là nó bắt fen code càng nhanh càng tốt cho kịp bàn giao với khách hàng, còn product thì sản phẩm chính kinh doanh lâu dài của công ty nên phải viết unitest, kỹ chút, đôi khi phải code đẹp chút cho dễ bảo trì, chứ viết như đống bùi nhùi đặt tên hàm biến lung tung thì khổ mấy thằng code sau vl.
 

Thất học

Senior Member
các fen thường viết Unit test với Junit hay Automation test với selenium, khi nào viết unit và khi nào auto vậy thím
Thường dev thì họ sẽ dùng unitest, còn tester thì họ sẽ dùng automation test với selenium. Hiểu đơn giản là người dev sẽ test về mặt logic bên trong, khi fen có source của dự án ví dụ như fen sẽ viết test case, cho chạy để test chữ in hoa, giới hạn chiều dài mật khẩu, công thức tính toán, thông báo ...vv.... , còn tester họ không có source dự án nên họ sẽ test bên ngoài dự án như giao diện, viết test case và dùng automation selenium cho nó test.
 

gaconkute

Junior Member
Thường dev thì họ sẽ dùng unitest, còn tester thì họ sẽ dùng automation test với selenium. Hiểu đơn giản là người dev sẽ test về mặt logic bên trong, khi fen có source của dự án như chữ in hoa, giới hạn chiều dài mật khẩu, công thức tính toán, ...vv.... , còn tester họ không có source dự án nên họ sẽ test bên ngoài dự án như giao diện.
bác ơi bác có thể chia sẻ em cách bác suy nghĩ cover all test cases k, ví dụ bài toán trên đầu của em đi. Bác có recommend em nên đọc sách gì, học khóa gì k. THanks
 

tdat00

Đã tốn tiền
bác ơi bác có thể chia sẻ em cách bác suy nghĩ cover all test cases k, ví dụ bài toán trên đầu của em đi. Bác có recommend em nên đọc sách gì, học khóa gì k. THanks

Unit test không dựa trên API, nó là intergration tests rồi.

Giả sử để làm API đó thím phải tạo ra nhiều class:

* 1 class controller (chuyên để nhận http request, map query string thành object, chuyển tiếp xử lý rồi trả về http response.
1
  • 1 hoặc nhiều class service để xử lý business logic
  • 1 hoặc nhiều class repository để read/write database...

Thì thím phải tạo các bộ unit tests tương ứng với từng class ở trên, mỗi bộ test viết các test case để cover các nhánh code trong class đó. Nếu thím code đúng chuẩn OOP SOLID thì sẽ rất dễ viết unit tests.

Sent from Samsung SM-A528B using vozFApp
 

Thất học

Senior Member
Unit test không dựa trên API, nó là intergration tests rồi.

Giả sử để làm API đó thím phải tạo ra nhiều class:

* 1 class controller (chuyên để nhận http request, map query string thành object, chuyển tiếp xử lý rồi trả về http response.
1
  • 1 hoặc nhiều class service để xử lý business logic
  • 1 hoặc nhiều class repository để read/write database...

Thì thím phải tạo các bộ unit tests tương ứng với từng class ở trên, mỗi bộ test viết các test case để cover các nhánh code trong class đó. Nếu thím code đúng chuẩn OOP SOLID thì sẽ rất dễ viết unit tests.

Sent from Samsung SM-A528B using vozFApp
Tiếc là junior không có ưng, chứ không ưng fen 1 cái. Thú thật thì t không làm dev mà làm system engineer nhưng biết 1 chút về lập trình nên chém gió, không thể giải thích rõ ràng như dev thứ thiệt đc.
 

gaconkute

Junior Member
Unit test không dựa trên API, nó là intergration tests rồi.

Giả sử để làm API đó thím phải tạo ra nhiều class:

* 1 class controller (chuyên để nhận http request, map query string thành object, chuyển tiếp xử lý rồi trả về http response.
1
  • 1 hoặc nhiều class service để xử lý business logic
  • 1 hoặc nhiều class repository để read/write database...

Thì thím phải tạo các bộ unit tests tương ứng với từng class ở trên, mỗi bộ test viết các test case để cover các nhánh code trong class đó. Nếu thím code đúng chuẩn OOP SOLID thì sẽ rất dễ viết unit tests.

Sent from Samsung SM-A528B using vozFApp
em hiểu, Junit hay unit test nó chia từng layer của bác ví dụ controller, service... thì bác test từng layer đúng k. Còn automation test là bác test từng chức năng. Ok vậy khi nào dùng cái nào bác nhỉ, mục đích cuối cùng chỉ là đảm bảo kết quả sau khi code thôi mà
 

tdat00

Đã tốn tiền
em hiểu, Junit hay unit test nó chia từng layer của bác ví dụ controller, service... thì bác test từng layer đúng k. Còn automation test là bác test từng chức năng. Ok vậy khi nào dùng cái nào bác nhỉ, mục đích cuối cùng chỉ là đảm bảo kết quả sau khi code thôi mà

Không phải khi nào dùng cái nào, mà cả 2 loại unit test và integration test đều cần thiết, trong đó unit test quan trọng hơn vì có thể chạy script trên CI CD được dễ dàng.

Unit test để hạn chế việc dev sửa/xoá 1 hàm/class làm nó chạy khác với mục đích của tác giả -> làm break những chỗ khác đang gọi đến hàm/class đó.

Intergration cũng gần giống vậy, nhưng nó ở mức lớn hơn từ module này gọi qua module khác.

Sent from Samsung SM-A528B using vozFApp
 

gaconkute

Junior Member
Không phải khi nào dùng cái nào, mà cả 2 loại unit test và integration test đều cần thiết, trong đó unit test quan trọng hơn vì có thể chạy script trên CI CD được dễ dàng.

Unit test để hạn chế việc dev sửa/xoá 1 hàm/class làm nó chạy khác với mục đích của tác giả -> làm break những chỗ khác đang gọi đến hàm/class đó.

Intergration cũng gần giống vậy, nhưng nó ở mức lớn hơn từ module này gọi qua module khác.

Sent from Samsung SM-A528B using vozFApp
vậy viết unit r có bắt buộc auto k bác
 

tdat00

Đã tốn tiền
vậy viết unit r có bắt buộc auto k bác

Auto của thím là automation test hay auto chạy unit test?

Automation test cũng gần giống như integration test như tôi nói ở trên.

Auto chạy unit test thì gần như bắt buộc rồi. Dev comit code lên thì con CI nó tự chạy unit test rồi tính code coverage này nọ...

Sent from Samsung SM-A528B using vozFApp
 

gaconkute

Junior Member
Auto của thím là automation test hay auto chạy unit test?

Automation test cũng gần giống như integration test như tôi nói ở trên.

Auto chạy unit test thì gần như bắt buộc rồi. Dev comit code lên thì con CI nó tự chạy unit test rồi tính code coverage này nọ...

Sent from Samsung SM-A528B using vozFApp
automation như selenium đó bạn
 
Top