Reference · Testing

Jenis test dan test double

Ringkasan satu halaman. Dari Lesson 0010.

Testing pyramid

JenisMengujiJumlahNode
Unit TestSatu komponen terisolasi (ProductService), I/O diganti test double. Fast, Isolated, Repeatable, Self-Checking, Timely [2]Paling banyakJest + jest.fn()
Integration Test"two or more app components work together": pipeline HTTP → Controller → Service → DB [1]Sedikit, skenario infrastruktur pentingSupertest
E2EBrowser Angular sampai databasePaling sedikit (lambat, flaky) [4]Playwright / Cypress

Aturan: "If a behavior can be tested using either a unit test or an integration test, choose the unit test." [1]

Test double [3]

IstilahPeranMoqJest
StubJawaban siap; tidak di-assertSetup(...).ReturnsAsync(x)mockReturnValue
MockPanggilannya diverifikasi (behavior verification) [5]Verify(..., Times.Never())toHaveBeenCalled
FakeImplementasi kerja dengan jalan pintasSQLite in-memoryRepository berbasis array
DummyHanya mengisi parameterMock.Of<ILogger<T>>(){}

new Mock<T>() tanpa Verify berperan sebagai stub. Dokumen .NET memakai "fake" sebagai istilah umum (stub atau mock). [2]

WebApplicationFactory<Program> [1]

Apa yang di-mock

YaTidak
Batas I/O: IProductRepository, HTTP client keluar, jam sistemEntity/DTO, SUT, method private, DbSet untuk query (LINQ = extension method statis) [9]

Database test (saran EF Core [9]): DB produksi asli (Testcontainers) → repository pattern → SQLite in-memory (beda dialek, case-sensitive) → hindari provider EF Core in-memory.

Jawaban 60 detik

Jenis test: unit = satu komponen terisolasi, I/O di-mock, milidetik; integration = beberapa komponen bersama sampai DB; E2E = dari UI. Piramida: makin tinggi makin sedikit. API diuji dengan WebApplicationFactory (TestServer in-memory, CreateClient), DbContext diganti SQLite/Testcontainers.

Test double: stub = jawaban siap, tidak di-assert; mock = panggilannya di-Verify; fake = implementasi ringan (SQLite in-memory). Mock batas I/O; jangan mock Entity/DTO, SUT, method private, atau DbSet untuk query.

Sumber: [1] Microsoft Learn: Integration tests in ASP.NET Core · [2] Microsoft Learn: Unit testing best practices · [3] Martin Fowler: TestDouble · [4] The Practical Test Pyramid · [5] Martin Fowler: Mocks Aren't Stubs · [9] EF Core: Choosing a testing strategy