Буцах

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 correctAnd how tests solve it.
Types testingFrameworks, structure, naming; accounting/financial logic.
  • Unit testing fundamentalsFrameworks, structure, naming, precision, edge cases, rounding rules
  • Integration testingIntegration testing frameworks, structure, naming.
  • End-to-end testingEnd-to-end testing frameworks, structure, naming.
  • User acceptance testingUser acceptance testing frameworks, structure, naming.
Testing pyramid ба TDDUnit vs integration vs E2E; writing tests before AI-generated code.
  • The testing pyramidUnit vs integration vs E2E and where to invest.
  • TDD liteWriting tests before AI-generated code, not religious TDD.
Дэвшилтэт аргуудProperty-based, mocking, mutation, coverage, snapshot.
  • Property-based testingGreat for financial invariants (e.g. debits balance credits).
  • Mocking and faking dependenciesTesting without hitting real DBs or APIs.
  • Mutation testingVerifying your tests actually catch bugs.
  • Code coverage as safety net, not metricWhat 80% coverage means and doesn't mean.
  • Golden master / snapshot testingFor legacy code with no tests yet.
Testing with AIPrompting AI to generate test cases you hadn't thought of.
  • Testing with AIPrompting 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 тестийг тест пирамидын дагуу тооны хувьд бага, гэхдээ чухал урсгалуудыг багтаана.