惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
GbyAI
GbyAI
L
LangChain Blog
Vercel News
Vercel News
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
T
Threat Research - Cisco Blogs
T
Threatpost
Scott Helme
Scott Helme
T
Tailwind CSS Blog
Latest news
Latest news
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
罗磊的独立博客
P
Proofpoint News Feed
腾讯CDC
S
Schneier on Security
雷峰网
雷峰网
A
About on SuperTechFans
T
Tenable Blog
F
Full Disclosure
Cyberwarzone
Cyberwarzone
博客园_首页
有赞技术团队
有赞技术团队
K
Kaspersky official blog

DEV Community

How does VuReact compile Vue's KeepAlive component to React? Why We Bet on MCP (And What We're Still Figuring Out) China Payment Terms: T/T, LC, Escrow When the LLM Refuses: A Fallback Chain That Salvages Most Refusals Hardware Startup Manufacturing in China: A Founder's Guide Inworld TTS Paralinguistic Tags Don't Work — Here's What Does OEM vs ODM Electronics China: Which Model to Choose 9 Services, One Architecture: What We Learned Shipping FSx for ONTAP Logs to Every Major Observability Platform PCB Assembly in China: Buyer's Guide How to Source Electronics from China China Factory Audit Checklist We Built a Real-Time AI Research Collaborator Into our JOT writing tool How to Give Claude Access to Snowflake Without Exposing PII The Agent that grows with you What Building Agent_Sudo Taught Me About AI Agent Security (Before I Found Any Users) Abortion Rights Matter PySide6 vs Electron: Why I shipped a 118 MB Windows desktop tool, not a 250 MB cross-platform one MCP Servers for BI Tools: Looker, Tableau, Power BI, Mode (2026) My AI Agent Kept Lying to Me. Then It Tried to Trick Me. Atlan Alternatives: 6 Open-Source Data Catalogs Compared (2026) How I stopped wrestling with regex and started using AI for data extraction How I Built an AI Assistant That Grows Its Own Tools Interactive Floor Plans for Real Estate Developers — Why Static PDFs Are Dead Vue slot to React: How does VuReact handle it? I Found 54 Reliability Issues in My 14-Agent AI System — Here's What Broke I Built 24 Free Browser Tools in 6 Weeks — Here's What I'd Do Differently Octorato: an open-source AI agent OS with built-in per-client FinOps RAG Explained for Beginners: How AI Assistants Stop Making Things Up Curing LLM Hallucinations: Building a Production-Grade Medical RAG with PubMed and Hybrid Search I don't want to write HTML or fight global CSS, so I built a TypeScript DSL FSx for ONTAP Audit Logs with Data Residency in your region with Sumo Logic Someone contributed 3,324 lines to our open K-12 AI lesson library — a 6-unit series asking students to interrogate AI, not just use it My website has two audiences now. I only built for one of them. AI-Powered Root Cause: Correlating File Access with APM via Dynatrace Opus 4.8 ships Dynamic Workflows — hundreds of parallel subagents per session. Read this before you wire it into prod. We Cut $120,000 from Our Cloud Bill Without Sacrificing Reliability Stress Concentration Factor: Why a Small Hole Can Triple Local Stress Streaming an LLM response, in 4 GIFs High-Cardinality File Access Analysis with Honeycomb + OTel Introduction to n8n: Beginner Course Summary What Happens in 2 Milliseconds: Anatomy of a Single HTTP Request Through a Production WAF Why Veltrix Thought It Could Buy Its Way Out of a Distributed Lock Problem 10 Free Developer Utility Tools That Run Entirely in Your Browser 《认知革命播客》:个人AI基础设施的深度实践与安全思辨 Weekend Supervised Vibe Coding Why I Run Claude Code Plugins for Brand Voice Enforcement x.klickd v4.1: Portable, Encrypted, Human-Governed Memory for AI Workflows That Don’t Reset EC2 to Serverless: Modernizing FSx for ONTAP Splunk Integration AI Can Introduce Complexity Without Introducing Noise — But Only If the Repo Knows How to Hold the Complexity 🛠️Building My First AI Agent with Hermes Agent 🤖 I Built a Flutter App with Firebase + MercadoPago and Turned It Into a Starter Kit (Real Production Code) Hermes Commander: An Autonomous Research Assistant Powered by Hermes Agent 🧠 Why Webhooks Fail Behind Firewalls (And Why Every Fix Has the Same Problem) Have Antigravity review prompts update themselves when your codebase changes 5 Browser-Based Image Tools That Work Entirely Offline — No Upload Required 7 Free PDF Tools That Never Upload Your Files — All Client-Side Building a Cloud SIEM from Scratch with AWS Lambda and EventBridge Compound Engineering: A Plugin That Makes Your AI Coding Agent Smarter Over Time "I Reviewed 50 Dev Resumes — These 5 Mistakes Killed Their Chances" How to Test Your SPF Record for Common Mistakes (Step by Step) Building a Real-Time Financial Sentiment API: Handling Noise and LLM Hallucinations Tokyo Transit: How MCP Helped Me Fix a Broken Multi-Agent System Try the Tech Radar #2 — Markdown Typst Converter (Typst's Syntax Is Closer to Markdown Than LaTeX) 🩺 Inside Med AI: How We Engineered a 100M Token Hyper-Scale Clinical Intelligence Suite 🚀 Common Mistakes New Developers Always Make & How to Avoid Them Effectively Session Management, Rate Limiting & Caching using Redis Why Accuracy Is Not Enough: Evaluation Metrics Every AI Engineer Should Understand How I Built One Building Instagram Data Workflows with HikerAPI (Without Maintaining Scrapers) Claude Code can't open my browser. Cowork can't run my tests. So I wired them together. AGTP: A Transport Protocol Built for Agents I built Snipworth a Chrome extension to turn code into shareable images — and keep them for later My Friend's Two Android Apps, Three Months Lost, and Why We Built onTest Blue-Green Deployments Are Invisible. I Made Mine Visible. Here Is How. Need your attention on my current project Why a deleted backup Lambda kept billing 9,400 EBS snapshots Deterministic Telemetry Ingestion Pipeline for GridLoqer Your Deployments Are Causing Downtime. Mine Do Not. Here Is Why How I Built a 7-Layer NL2SQL Guardrail Stack for a Fortune 500 Enterprise Identity in Web3 The Trap of "Perfect" Architecture: What Building a Shopping Cart Taught Me The Browser Boundary Model: APIs, CORS, Cookies, JSON, Files, and SEO ModelChain: Measurable LLM Router with Adaptive Model Selection, Real-Time Scoring, Budget Guards and Failover for Node.js, Edge and Browser I Built a 25-Agent Polish Parliament That Drafts Bills With Real Legal Citations KeyMesh: Zero-Runtime-Dependency API Key Rotation, Circuit Breaker and Failover for Production LLM Applications in Node.js Claude Code's workflow docs are a menu. Building a home server with a mini PC Stop Shipping AI Slop: Build an Anti-Slop Harness Around Your LLM I built an open source SDK to catch AI agent regressions before they ship. Great Stack to Doesn't Work #3 — Redis: "99% Cache Hit Ratio, System Down" The Bug That Passes Every Toolchain Check: Circular Dependencies in JavaScript Great Stack to Doesn't Work Bonus: SQL vs NoSQL: Which One in 2026? Great Stack to Doesn't Work #2 — Kafka: "Where Did My Messages Go?" I built a detention-pay calculator for truckers in a day — unglamourous niches beat another AI wrapper The Same AI Model Can Perform 6x Better: Here's Why SQL-like Queries in FSRS Plugin for Obsidian [Imposter syndrome] Back to the beginning (DevSecOps path) How to Build a Kundali App with Free Vedic Astrology API — Step by Step Ideias Valem Muito Menos do Que Você Imagina [PT-BR] cgroups and Namespaces — The Linux Kernel's Building Blocks Behind Containers
How to test your code effectively: a practical testing tutorial
Rizwan Saleem · 2026-05-31 · via DEV Community

Rizwan Saleem

How to test your code effectively: a practical testing tutorial

Unit, integration, and end-to-end (E2E) testing form a pyramid of verification: fast, cheap unit tests guard business logic; slower, more integration-focused tests verify interactions between components; and a smaller set of fragile but user-visible E2E tests ensure real-world flows work.

Unit tests: what to test and how

  • Focus on pure logic and edge cases. Test a function’s input-output behavior with representative inputs, including boundary and error conditions.
  • Isolate units: test them independently from dependencies via mocks or stubs. This keeps tests fast and deterministic.
  • Typical targets: validation rules, business logic gates, pure functions, small utilities, and domain rules.
  • What not to overdo: coverage for trivial getters/setters or trivial data transformations that have no risk.

Integration tests: what to verify between parts

  • Test interactions between modules, services, and external systems (databases, message queues, APIs) to ensure they work together as expected.
  • Validate data contracts: how data passes between layers, serialization/deserialization, and error handling when a downstream component misbehaves.
  • Use real or near-real dependencies when the test’s value justifies the cost; replace slow or flaky dependencies with stable test doubles when appropriate.
  • Focus on critical integration points rather than every combination; aim to cover the most business-critical flows and data paths.

E2E tests: user-centric and high-value

  • Exercise full user journeys from start to finish, ideally via public interfaces (APIs or UI) that mirror real usage.
  • Prioritize the most important user workflows that, if broken, would hurt the product’s value or user experience.
  • Keep tests resilient to UI changes: drive through APIs when possible, and use UI tests for stability-critical paths only.
  • Balance breadth and speed: a small set of high-signal journeys beats a large suite of brittle end-to-end tests.

Meaningful tests, not just coverage

  • Coverage is a byproduct, not a goal; measure value by how well tests prevent real defects and catch regressions in risk-prone areas.
  • Write tests that reveal real failures: cover business rules, edge cases, and consent/permission flows, not only “happy path” scenarios.
  • Align tests with requirements and user goals. If a failure would confuse users or break compliance, give that test priority.

Mocking strategies that pay off

  • Use mocks to isolate the unit under test, ensuring you verify interactions and inputs/outputs without hitting real dependencies.
  • Prefer precise, minimal mocks that reflect actual contract behavior; avoid over-mocking that hides integration issues.
  • Employ spies or fake implementations to observe calls and validate side effects without external effects.
  • Update mocks in tandem with API changes to prevent brittle tests when interfaces evolve.

Handling flaky tests

  • Identify flakiness sources: timing, uninitialized state, external services, or non-deterministic environments.
  • Stabilize tests: remove shared state, avoid time-based assertions, and synchronize on explicit events.
  • Quarantine flaky tests: run suspect tests in isolation or with extended retries, without blocking the main CI signal.
  • Increase resilience: add retries in CI for truly flaky tests after root-cause fixes; but ensure the root cause is addressed to prevent masking issues.

Testing in CI/CD

  • Automate test execution in a predictable, isolated environment that mirrors production constraints as much as possible.
  • Run a fast, parallelizable unit test suite first; gate longer integration and E2E runs behind a stable unit base.
  • Use feature flags and environment parity to avoid drift between local and CI environments.
  • Integrate flaky-test handling into CI: quarantine, retries, and dashboards highlighting flaky tests for triage.

Test-driven development (TDD/BDD)

  • TDD can help drive design and prevent over-engineering: write a failing test, implement just enough to pass, refactor.
  • Use BDD when you want test scenarios to reflect business language; map features to acceptance criteria and tests to user stories.
  • TDD/BDD value depends on team discipline and project complexity; it’s most beneficial when requirements are evolving or shared across teams.

Real-world examples

  • Example 1: A user registration flow
    • Unit: validate password strength logic, email format, and password-confirm matching.
    • Integration: ensure user service writes to the database, and email service queues a welcome message.
    • E2E: simulate a new user signing up and verifying email, then completing a profile, ensuring the UI reflects success and user state updates correctly.
  • Example 2: Order processing in an e-commerce system
    • Unit: discount calculation, inventory checks (pure logic), payment token validation.
    • Integration: order service communicates with payment gateway mocks, inventory service, and shipping API contracts.
    • E2E: end-to-end checkout from cart to order confirmation, including payment, inventory reservation, and notification.

What to test at each level (quick checklist)

  • Unit
    • Core business rules
    • Boundary conditions
    • Error paths and exceptions
    • Interaction contracts with dependencies via mocks
  • Integration
    • Data flow between layers (API, service, DB)
    • Collaboration of modules (service-to-service)
    • External system contracts (APIs, queues)
  • E2E
    • Critical user journeys
    • End-to-end data integrity across services
    • Performance under realistic loads (smaller scope, when feasible)

Test design patterns and practical tips

  • Test pyramid: emphasize unit tests, with a smaller but meaningful set of integration tests and a lean E2E suite.
  • Fixtures and data management: keep test data minimal, isolated, and reproducible; use factory patterns to generate consistent objects.
  • Idempotence: tests should be repeatable without side effects; reset state between runs.
  • Parallelization: run tests in parallel where possible but guard against shared mutable state that causes flakiness.
  • Observability: ensure tests emit clear, actionable failure messages and logs to diagnose issues quickly.

If you want, I can tailor a starter test plan for your project’s tech stack and provide example test cases in your preferred language/framework. Would you like a stack-specific plan (e.g., Node.js with Jest and Playwright, or Python with Pytest and Playwright), plus a sample 2-week rollout of unit/integration/E2E tests?

-

Rizwan Saleem | https://rizwansaleem.co