Hi các bạn,
Obviously, TDD tất nhiên là cực kỳ project của bạn, nó giúp devs tự tin và tăng độ tin cậy hơn. Cũng như với những applications mà có độ quan trọng cao thì ko thể thiếu được testing.
Vậy nên, Unit Testing + QA Testing (manual, automated,…) = Perfect match
Những cái khó khăn khi mà ta Google về Unit Testin g để học
Mình biết, nhiều ng` rất muốn học về unit testing, cách viết unit tests nhưng chưa ra tới chợ đã về vì biết rõ chợ bán toàn hàng…. lởm.
1000% chỗ nào cũng vậy, đều chỉ nói ra những cái cơ bản mà dường như ai cũng biết:
- Viết test đi, cần viết test này nè, test kia nè
- Test đơn giản thôi, viết function rồi assert nè
a+b=c
rồi testfunc(1,1) == 2
??? lol
assertTrue(true)
(lol)- …
Nhiều cái tấu hài lắm nhỉ, vậy nên học viết Unit Tests mà Google thì thôi, chỉ muốn nghỉ rồi tại quay về con đường no-test high-risk.
Thà vậy thì khỏi đăng bài còn hơn, vì chỉ viết mấy cái chung chung, ở mức độ kiến thức đọc cho vui và ko đem lại KQ gì nhiều.
Để học cách viết Unit Tests rồi dần dần tiến tới TDD, cách tốt nhất là phải có 1 Real-world project để tham khảo và tốt nhất là hand-on practice trên cái base đó.
Gặp KivaNote
Repository: https://github.com/sethsandaru/kiva-laravel-tdd
KivaNote là 1 project nhỏ mà mình tạo ra để chia sẻ cho các bạn cách viết unit tests:
- Từ dễ đến khó
- Show ra những chỗ các bạn cần test cho Laravel Application của bạn
KivaNote là một API Application, cung cấp các APIs cho 1 app note vui vẻ: đăng nhập, tạo và quản lý note, up hình ảnh (lưu trữ local hoặc ImgBB)
Chạy test?
php artisan test
hoặc composer test
Composer test là helper command mình đã add sẵn vào composer.json
Tests gì đi kèm?
- Unit Test: nơi bạn viết test cho các methods của Classes
- Quick Test: tương tự như unit nhưng chủ yếu là mocking data rồi test trực tiếp với method (ko tương tác với services nào cả, kể cả DB)
- Feature Test: nơi bạn viết test để test những Endpoints để đảm bảo nó return đúng đủ khi mình make 1 request
Ngoài ra, KivaNote cũng có integrated với ImgBB và show cho các bạn cách viết test cho External Service (service này hơi dễ, sắp tới mình sẽ kiếm 1 API Service khác kho khó hơn để integrate và viết test)
Nên bắt đầu từ đâu?
- Clone project về
- Check routes
api.php
và dần đi vào Controllers, Requests để hiểu flow cơ bản - Check sơ qua các Services
- Sau đó qua đọc Tests, bắt đầu từ Quick, Unit, Feature
Ta nên làm gì tiếp
Từ creative của bạn, hãy viết tiếp những endpoints để phát triển nhiều hơn các tính năng cho KivaNote, sau đó viết tests cho các features mà bạn đã tạo ra.
Đó là một cách tốt nhất để improve hơn nữa, vì học là phải đi đôi với hành.
Những features mình có thể suggest:
- Integrate với 1 API Image (ngoài ImgBB)
- Giới hạn số lượng note có thể tạo hằng ngày
- Premium system (vd free – 10 notes/ngày, pro – 100/ngày, pro max – unlimited)
- Payment for premium
- Integrate với Paypal hoặc Stripe
- …
Lời kết
Chúc các bạn học và viết test vui vẻ nhé!!