Буцах
Testing Culture
Testing Culture
Тестийн соёл, пирамид, TDD болон AI-тай тест бичих.
Яагаад тест хэрэгтэй вэ? — Why fear of AI breaking business logic is correct; how tests solve it.
- Why fear of AI breaking business logic is correct — And how tests solve it.
Types testing — Frameworks, structure, naming; accounting/financial logic.
- Unit testing fundamentals — Frameworks, structure, naming, precision, edge cases, rounding rules
- Integration testing — Integration testing frameworks, structure, naming.
- End-to-end testing — End-to-end testing frameworks, structure, naming.
- User acceptance testing — User acceptance testing frameworks, structure, naming.
Testing pyramid ба TDD — Unit vs integration vs E2E; writing tests before AI-generated code.
- The testing pyramid — Unit vs integration vs E2E and where to invest.
- TDD lite — Writing tests before AI-generated code, not religious TDD.
Дэвшилтэт аргууд — Property-based, mocking, mutation, coverage, snapshot.
- Property-based testing — Great for financial invariants (e.g. debits balance credits).
- Mocking and faking dependencies — Testing without hitting real DBs or APIs.
- Mutation testing — Verifying your tests actually catch bugs.
- Code coverage as safety net, not metric — What 80% coverage means and doesn't mean.
- Golden master / snapshot testing — For legacy code with no tests yet.
Testing with AI — Prompting AI to generate test cases you hadn't thought of.
- Testing with AI — Prompting AI to generate test cases you hadn't thought of.
Homework - Одоо байгаа код дээрээ unit + integration тестээр бүрхэх
Одоо ажиллаж буй төслөөс нэг модуль эсвэл feature сонгоод доорх алхмуудыг гүйцэтгэ.
1) Хамгийн чухал method-уудыг тодорхойл
- Тухайн модуль/feature-ийн бизнес логик, тооцоолол, validation хийгдсэн method-уудыг жагсаалтаар гарга
- Хамгийн их нөлөөтэй, регресс болох аюултай 3–5 method-ыг сонго (жишээ: зээлийн хүү тооцох, татвар тооцох, формат шалгах, дүрэм шалгах)
2) Сонгосон method-ууд дээр unit тест бич
- Тухайн хэл/framework-ийн unit test framework ашиглана (жишээ: Jest, Vitest, pytest, JUnit)
- Method бүрт дор хаяж:
- 1 “happy path” тест
- 1–2 edge case эсвэл буруу оролт (null, хоосон, хэт их/бага утга)
- Нэрлэлт нь юу шалгаж байгааг тодорхой байх (жишээ:
computeInterest_returnsCorrectValue_whenRateAndTermValid) - Баталгаажуулалт: бүх unit тестийг ажиллуулж pass болго; coverage-ийн хувь (хүсвэл) харьцуулж болно
3) Controller → DB integration тест (3rd party mock-той)
- Нэг controller эсвэл API endpoint сонго — энэ нь DB-тай холбогдож, гадаад 3rd party дуудлага (REST API, төлбөрийн gateway, SMS гэх мэт) хийж байгаа байх
- Integration тест дотор:
- DB: бодит test DB эсвэл in-memory DB (SQLite, H2, тест контейнер гэх мэт) ашиглана; шаардлагатай бол seed data оруулна
- 3rd party: бодит дуудлага хийхгүй, mock/stub ашиглана (MockServer, MSW, nock, эсвэл interface-ийг fake implementation-аар солино)
- Тест нь “request → controller → service → DB (унших/бичих) → 3rd party дуудлагыг mock-оор орлуулах → response” гэсэн урсгалыг бүтэн шалгана
- Баталгаажуулалт: integration тестийг ажиллуулж pass болго; 3rd party дуудлага mock-д байгааг (жишээ нь бодит URL дуудагдаагүй эсвэл mock-д тохирсон тохиолдолд л амжилттай) товч тайлбарлана
Зөвлөмж: Unit тестийг хурдан, тусгаарлагдсан байлга; integration тестийг тест пирамидын дагуу тооны хувьд бага, гэхдээ чухал урсгалуудыг багтаана.