# unit test

Published articles for unit test.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Test GitHub Actions Locally with Act

DevFeed: [Test GitHub Actions Locally with Act](<https://devfeed.tech/articles/test-github-actions-locally-with-act-32190.md>)

Original publisher: [Read original article](<https://spin.atomicobject.com/test-github-actions-locally-act/>)

Author: Valerie Nielson

Published: 2026-09-16T12:00:44Z

Content type: tutorial

Language: en

Sources: [Atomic Object](<https://devfeed.tech/sources/atomic-object.md>)

Topics: [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Docker](<https://devfeed.tech/topics/docker.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [unit test](<https://devfeed.tech/topics/unit-test.md>)

Tags: [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [developer-tools](<https://devfeed.tech/tags/developer-tools.md>), [docker](<https://devfeed.tech/tags/docker.md>), [github](<https://devfeed.tech/tags/github.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [pull-request](<https://devfeed.tech/tags/pull-request.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>), [workflow](<https://devfeed.tech/tags/workflow.md>)

### AI overview

This tutorial explains how to test GitHub Actions workflows locally with act. It describes how act uses Docker to reproduce the workflow environment, including environment variables and the file system, and demonstrates testing pull-request workflows and unit tests before merging.

### Source excerpt

GitHub Actions are a great way to implement CI/CD into your projects, whether personal or professional. GitHub has a lot of great tools to help with CI/CD, but GitHub Actions in particular is very helpful. However, writing actions can be tedious and a little annoying, especially if you don't know what you're doing. On top [...] The post Test GitHub Actions Locally with Act appeared first on Atomic Spin.

## From 57 bugs to 1, thanks to Seer

DevFeed: [From 57 bugs to 1, thanks to Seer](<https://devfeed.tech/articles/from-57-bugs-to-1-thanks-to-seer-24086.md>)

Original publisher: [Read original article](<https://blog.sentry.io/57-bugs-to-1/>)

Author: Dan Mindru

Published: 2026-07-23T09:00:00Z

Content type: tutorial

Language: en

Sources: [Sentry Blog](<https://devfeed.tech/sources/sentry-blog.md>)

Topics: [bug](<https://devfeed.tech/topics/bug.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [pull-requests](<https://devfeed.tech/topics/pull-requests.md>), [AI-assisted coding](<https://devfeed.tech/topics/ai-assisted-coding.md>), [test](<https://devfeed.tech/topics/test.md>)

Tags: [automation](<https://devfeed.tech/tags/automation.md>), [bug-fixes](<https://devfeed.tech/tags/bug-fixes.md>), [bugs](<https://devfeed.tech/tags/bugs.md>), [coding-agents](<https://devfeed.tech/tags/coding-agents.md>), [github](<https://devfeed.tech/tags/github.md>), [pull-request](<https://devfeed.tech/tags/pull-request.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

A guest post explains how Sentry, Seer, and cloud coding agents can automate fixes for lower-priority bugs, generate pull requests, and help clear a backlog.

### Source excerpt

Learn how to automate bug fixes using Sentry, Seer, and cloud coding agents to clear your backlog.

## Choosing Values for Robust Tests

DevFeed: [Choosing Values for Robust Tests](<https://devfeed.tech/articles/choosing-values-for-robust-tests-23871.md>)

Original publisher: [Read original article](<http://testing.googleblog.com/2026/06/choosing-values-for-robust-tests.html>)

Author: Google Testing Bloggers (noreply@blogger.com)

Published: 2026-06-04T12:47:00Z

Content type: tutorial

Language: en

Sources: [Google Testing Blog](<https://devfeed.tech/sources/google-testing-blog.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [test](<https://devfeed.tech/topics/test.md>), [Code](<https://devfeed.tech/topics/code.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [bug](<https://devfeed.tech/topics/bug.md>), [Fuzzing/Fuzz testing](<https://devfeed.tech/topics/fuzzing.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [bug](<https://devfeed.tech/tags/bug.md>), [code](<https://devfeed.tech/tags/code.md>), [fuzzing](<https://devfeed.tech/tags/fuzzing.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [radion-khait](<https://devfeed.tech/tags/radion-khait.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [tott](<https://devfeed.tech/tags/tott.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

The article explains how default-valued test inputs can let broken implementations pass unnoticed. It recommends non-default values, varied scenarios, boundary and special-case inputs, fuzzing, and distinct values for each parameter to improve test coverage and confidence.

### Source excerpt

This article was adapted from a Google Tech on the Toilet (TotT) episode. You can download a printer-friendly version of this TotT episode and post it in your office. By Radion Khait A test passes. Great! But does it really mean your code is working as expected? Not necessarily.Sometimes the values you choose in your tests can create a false sense of security, especially when dealing with default values. Consider this snippet of a simple map class and its corresponding unit test: Implementation Test void MyMap::insert(int key, int value) { // Oops! The map entry is default-initialized, // the second parameter is not used. internal_map_[key]; } TEST(MyMapTest, Insert) { MyMap my_map; my_map.insert(1, 0); // This passes! EXPECT_EQ(my_map.get(1), 0); } The test passes, but the insert method is broken! It never actually stores the value. The test only passes because the default value for an integer in the map (0) happens to match the value used in the test. When choosing test values, consider the following: Test with non-default values. Explicitly test with values different from the type's default (e.g., non-zero numbers, non-empty strings, enum values other than the one at index 0). This provides greater confidence that your code is actually using the provided input. TEST(MyMapTest, Insert) { MyMap my_map; my_map.insert(1, 5); // This test would fail and reveal the bug in // the implementation above: "Expected 5, got 0". EXPECT_EQ(my_map.get(1), 5); } Test multiple inputs that cover different scenarios, where it is reasonable to do so. Consider empty/missing/null values, numerical boundaries, and special cases that trigger complex logic. Try to cover all distinct code/logic paths. Consider using fuzzing to more thoroughly cover the input domain. Use different values for each input. This guarantees the code under test doesn't accidentally reuse a single input or switch their order. Parameterized testing can also help test a large variety of inputs with minimal code dupl

## Metro DI for Ktor Backend: From a God Object through manual DI to Constructor Injection

DevFeed: [Metro DI for Ktor Backend: From a God Object through manual DI to Constructor Injection](<https://devfeed.tech/articles/metro-di-for-ktor-backend-from-a-god-object-through-manual-di-to-constructor-injection-22966.md>)

Original publisher: [Read original article](<https://funkymuse.github.io/posts/metro-di-ktor-server/>)

Author: FunkyMuse

Published: 2026-05-15T15:35:00Z

Content type: tutorial

Language: en

Sources: [FunkyMuse](<https://devfeed.tech/sources/funkymuse.md>)

Topics: [Ktor](<https://devfeed.tech/topics/ktor.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [modules](<https://devfeed.tech/topics/modules.md>)

Tags: [backend](<https://devfeed.tech/tags/backend.md>), [constructor](<https://devfeed.tech/tags/constructor.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [di](<https://devfeed.tech/tags/di.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [ktor](<https://devfeed.tech/tags/ktor.md>), [redis](<https://devfeed.tech/tags/redis.md>), [server](<https://devfeed.tech/tags/server.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

This article describes replacing manual dependency injection in a Ktor backend with Metro. It explains how default constructor parameters and a central BackendComponent can accidentally couple tests to real dependencies such as Redis, while Metro wires constructor parameters at compile time and removes those defaults.

### Source excerpt

The Starting Point: a God Object When Rudio was a created a few months ago it used the simplest possible DI: one big object BackendComponent with everything wired manually via by lazy and lateinit var. No framework, no annotations, no ceremony, then i started adding things and manual DI became a tedious and tiring task because everywhere i used default parameters to achieve default constructor...

## Hunting iOS Memory Leaks: S1E1

DevFeed: [Hunting iOS Memory Leaks: S1E1](<https://devfeed.tech/articles/hunting-ios-memory-leaks-s1e1-28534.md>)

Original publisher: [Read original article](<https://www.amanjeet.me/hunting-ios-memory-leaks-s1e1/>)

Author: Amanjeet Singh Gurtatta

Published: 2026-05-09T09:43:49Z

Content type: article

Language: en

Sources: [Amanjeet Singh](<https://devfeed.tech/sources/amanjeet-singh.md>)

Topics: [Memory Leaks](<https://devfeed.tech/topics/memory-leaks.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [test](<https://devfeed.tech/topics/test.md>)

Tags: [automation](<https://devfeed.tech/tags/automation.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [ios](<https://devfeed.tech/tags/ios.md>), [memory](<https://devfeed.tech/tags/memory.md>), [memory-leak](<https://devfeed.tech/tags/memory-leak.md>), [memory-leaks](<https://devfeed.tech/tags/memory-leaks.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [traces](<https://devfeed.tech/tags/traces.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

The first edition of Hunting Memory Leaks describes development of XCTestLeaks, a tool that runs unit test schemes, checks for retain cycles with leaks(1), and produces HTML leak reports. The author reports fixing two memory leaks in Firefox-iOS-related code and outlines a workflow using project-specific GitHub Actions, Claude Code, and optional upstream issues or pull requests.

### Source excerpt

Welcome to the first edition of Hunting Memory Leaks. Another wild week, mostly battling with XCTestLeaks, the tool I've been building on the side. I'll release it once I'm confident the workflow holds up across at least 5 repos. For context, I've

## Improving Frontend Regression Testing with Chromatic

DevFeed: [Improving Frontend Regression Testing with Chromatic](<https://devfeed.tech/articles/improving-frontend-regression-testing-with-chromatic-30794.md>)

Original publisher: [Read original article](<https://devblog.kogan.com/blog/improving-frontend-regression-testing-with-chromatic>)

Author: Stephen De Vaux

Published: 2026-01-30T01:00:49Z

Content type: article

Language: en

Sources: [Kogan.com](<https://devfeed.tech/sources/kogan-com.md>)

Topics: [Front end](<https://devfeed.tech/topics/frontend.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Storybook](<https://devfeed.tech/topics/storybook.md>), [Remix](<https://devfeed.tech/topics/remix.md>), [browser](<https://devfeed.tech/topics/browser.md>), [ci](<https://devfeed.tech/topics/ci.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [pull-requests](<https://devfeed.tech/topics/pull-requests.md>), [Developer experience](<https://devfeed.tech/topics/developer-experience.md>), [unit test](<https://devfeed.tech/topics/unit-test.md>)

Tags: [automation](<https://devfeed.tech/tags/automation.md>), [browser](<https://devfeed.tech/tags/browser.md>), [ci](<https://devfeed.tech/tags/ci.md>), [developer-experience](<https://devfeed.tech/tags/developer-experience.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [regression](<https://devfeed.tech/tags/regression.md>), [remix](<https://devfeed.tech/tags/remix.md>), [storybook](<https://devfeed.tech/tags/storybook.md>), [testing](<https://devfeed.tech/tags/testing.md>), [ui](<https://devfeed.tech/tags/ui.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>), [visual-regression-testing](<https://devfeed.tech/tags/visual-regression-testing.md>)

### AI overview

The article explains how Kogan integrated Chromatic into a Remix-based frontend testing workflow to detect visual regressions that traditional unit tests may miss. It describes Chromatic's Storybook integration, browser screenshots, baseline comparisons, CI workflow, and the differences between UI Review and Visual Tests.

### Source excerpt

After recently migrating our frontend to Remix, we took the opportunity to reassess how we approach frontend testing, particularly regression testing. While we already had unit test coverage, we identified a gap when it came to validating UI changes. This is where Chromatic became a part of our frontend testing strategy. This post outlines why we introduced Chromatic and how it fits into a Remix-based workflow. Even when application functionality remains unchanged, subtle visual regressions can still be introduced. Changes to spacing, typography, layout, or component states can easily slip through without being caught by traditional tests. What we needed was a way to automatically detect meaningful UI changes while still fitting into our existing development workflow. At the same time, it was important to avoid introducing a fragile or high-maintenance testing setup, one that adds overhead without delivering proportional benefit. Our implementation with Chromatic attempts to balance automation, reliability, and developer experience as a practical addition rather than an extra burden. Why Chromatic? Chromatic provides visual regression testing on top of Storybook. Instead of testing components purely through assertions, Chromatic renders components in a real browser environment and captures screenshots. These are then compared against a known baseline to highlight visual changes. The key reasons we chose Chromatic were: Automated visual diffs that are easy to review Integration with Storybook, which we already use for component development CI-friendly workflow that fits well into pull requests Chromatic offers two closely related features for reviewing UI changes: UI Review and Visual Tests. While they have some overlap of functionality, they serve different purposes and are designed for different levels of enforcement. UI Review is enabled by default, whereas Visual Tests are an optional feature. UI Review generates snapshots that highlight differences against a bas

## Why the Author Is Skeptical of Test-Driven Development

DevFeed: [Why the Author Is Skeptical of Test-Driven Development](<https://devfeed.tech/articles/the-cults-of-tdd-and-genai-20793.md>)

Original publisher: [Read original article](<https://drewdevault.com/blog/Cult-of-TDD-and-LLMs/>)

Author: January

Published: 2026-01-29T00:00:00Z

Content type: opinion

Language: en

Sources: [Drew DeVault](<https://devfeed.tech/sources/drew-devault.md>)

Topics: [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [test-coverage](<https://devfeed.tech/topics/test-coverage.md>)

Tags: [software-testing](<https://devfeed.tech/tags/software-testing.md>), [tdd](<https://devfeed.tech/tags/tdd.md>), [test-coverage](<https://devfeed.tech/tags/test-coverage.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

The author argues that test-driven development can provide useful rapid feedback and test coverage, but warns that it may shape code around testability and cannot ensure that tested behavior matches actual software requirements.

### Source excerpt

I've gotten a lot of flack throughout my career over my disdain towards test-driven development (TDD). I have met a lot of people who swear by it! And, I have also met a lot of people who insisted that I adopt it, too, often with the implied threat of appealing to my boss if appealing to me didn't work. The basic premise of TDD, for those unaware, is that one first writes a unit test that verifies the expected behavior for some code they want to write, observes the new test fail, and then one writes the implementation, iterating on it until the test passes. The advantage of this approach is, first, to ensure that your codebase is adequately covered by testing, and, second, to provide you a rapid feedback loop to assist in your work. I have often found elements of TDD to be quite useful. Using a unit test or something similar to provide an efficient rapid feedback loop is a technique which I have employed many times. However, I am and have always been skeptical of the cult which arises around automated software testing and in particular TDD. A lot of people adopt an unquestioning loyalty to TDD, building tools and practices and vibes around the idea. It's often too much. The flaw with TDD is that, while it ensures that you have a test for every function you write, it also exerts an influence on the tested codebase, shaping the code to be as "testable" as possible, which only sometimes leads to better code. Moreover, TDD has no means of ensuring that the behavior that your tests verify is the right behavior for your software to have. Software with a thousand passing tests and 100% test coverage could be doing whatever the user or the business or whatever needs it to, but it could just as easily not meet the requirements in spite of those comprehensive tests - and in any case it gives you confidence in your work, which may or may not be misplaced. The cult of TDD exploits the fact that TDD is very good at making you feel like a good, diligent programmer. That rapid fee

## How The New York Times is scaling Unit Test Coverage using AI Tools

DevFeed: [How The New York Times is scaling Unit Test Coverage using AI Tools](<https://devfeed.tech/articles/how-the-new-york-times-is-scaling-unit-test-coverage-using-ai-tools-39152.md>)

Original publisher: [Read original article](<https://open.nytimes.com/how-the-new-york-times-is-scaling-unit-test-coverage-using-ai-tools-fa796bf9b8d2?source=rss----51e1d1745b32---4>)

Author: The NYT Open Team

Published: 2026-01-13T18:51:55Z

Content type: article

Language: en

Sources: [New York Times](<https://devfeed.tech/sources/new-york-times.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [test-coverage](<https://devfeed.tech/topics/test-coverage.md>), [unit test](<https://devfeed.tech/topics/unit-test.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Development](<https://devfeed.tech/topics/development.md>), [Web app](<https://devfeed.tech/topics/webapp.md>), [React](<https://devfeed.tech/topics/react.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-tools](<https://devfeed.tech/tags/ai-tools.md>), [code](<https://devfeed.tech/tags/code.md>), [coverage](<https://devfeed.tech/tags/coverage.md>), [development](<https://devfeed.tech/tags/development.md>), [reliability](<https://devfeed.tech/tags/reliability.md>), [scaling](<https://devfeed.tech/tags/scaling.md>), [software](<https://devfeed.tech/tags/software.md>), [test-coverage](<https://devfeed.tech/tags/test-coverage.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>)

### AI overview

The New York Times describes using AI tools to expand unit-test coverage across its News site. The agents improved efficiency and coverage on critical code, but required strict human supervision and human review of the generated tests.

### Source excerpt

How AI tools are helping our software engineers write better tests at scaleIllustration by Nick Little By Eric Chima and Leonardo Quixadá At The New York Times, we're all excited to build fresh new experiences that delight our users. Our product managers are driven to find new ways to get our work in front of our audience and build reader engagement. Our engineers are motivated to solve unique technical challenges. And just when you think all that work is on track, breaking news strikes and all of our plans change at once. With all that going on, who could blame us if our test coverage couldn't quite keep up? Like every engineering organization, The Times deals with routine maintenance tasks: updating dependencies, cleaning up old code, maintaining accessibility standards, and, yes, building testing into all of our products. Our engineers are committed to quality, but when you work at the speed of news, there's always a new issue that needs to be addressed. Fortunately, generative AI has arrived with the promise of tidying up after us, taking care of the busy work, and giving time back to our developers to focus on feature development. But how far can you trust it? Recently, one of our platform teams used AI tools to build out unit tests across our flagship product, the News site. This was an opportunity for our testing to catch up with our rapid development. Our goal was to improve the reliability of our web app, but also to evaluate AI products and determine how far we could push them to do work in bulk across our codebase. As expected, the agents required strict human supervision, but they improved our efficiency in writing tests and let us quickly expand coverage on some of our most critical code. AI accelerates, but humans test the tests Unit tests are a crucial part of the development process. The idea is to divide application code into small pieces and write tests for each, creating guardrails to ensure that changing one piece of the site doesn't impact the r

## Create an application layer load balancer with Golang

DevFeed: [Create an application layer load balancer with Golang](<https://devfeed.tech/articles/create-an-application-layer-load-balancer-with-golang-32281.md>)

Original publisher: [Read original article](<https://domenicoluciani.com/2024/02/12/creating-an-application-layer-load-balancer.html>)

Author: Domenico Luciani

Published: 2024-02-11T23:00:00Z

Content type: tutorial

Language: en

Sources: [Domenico Luciani](<https://devfeed.tech/sources/domenico-luciani.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [nginx](<https://devfeed.tech/topics/nginx.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [health check](<https://devfeed.tech/topics/health-check.md>), [servers](<https://devfeed.tech/topics/servers.md>), [Availability](<https://devfeed.tech/topics/availability.md>), [client](<https://devfeed.tech/topics/client.md>), [unit test](<https://devfeed.tech/topics/unit-test.md>)

Tags: [client](<https://devfeed.tech/tags/client.md>), [go](<https://devfeed.tech/tags/go.md>), [health-check](<https://devfeed.tech/tags/health-check.md>), [high-availability](<https://devfeed.tech/tags/high-availability.md>), [http](<https://devfeed.tech/tags/http.md>), [load-balancer](<https://devfeed.tech/tags/load-balancer.md>), [server](<https://devfeed.tech/tags/server.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

A tutorial describing the implementation of an application-layer load balancer in Golang. It explains HTTP request routing across multiple servers, health checks, handling servers going offline or returning online, and testing a request-forwarding component.

### Source excerpt

Since the last time I had too much fun, I wanted to repeat the experiment by taking another Coding Challenge. This time I'm gonna explain how I implemented an Application Load...

## Kotlin and Java interoperability: Traps and gotchas

DevFeed: [Kotlin and Java interoperability: Traps and gotchas](<https://devfeed.tech/articles/kotlin-and-java-interoperability-traps-and-gotchas-39204.md>)

Original publisher: [Read original article](<https://kt.academy/article/ak-java-interop-4>)

Published: 2023-08-21T00:15:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [interoperability](<https://devfeed.tech/topics/interoperability.md>), [Java](<https://devfeed.tech/topics/java.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [gotchas](<https://devfeed.tech/topics/gotchas.md>), [exceptions](<https://devfeed.tech/topics/exceptions.md>)

Tags: [gotchas](<https://devfeed.tech/tags/gotchas.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [mockito](<https://devfeed.tech/tags/mockito.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This tutorial explains surprising aspects of Kotlin and Java interoperability, including return types, function types and functional interfaces, Java keywords used in Kotlin names, Mockito's `when` function, Kotlin/JVM naming constraints, and Java checked exceptions.

### Source excerpt

The parts of Kotlin and Java interoperability that might be surprising or counterintuitive.

## Interfaces 101 : Testing with a Mock Interface Ep. 8

DevFeed: [Interfaces 101 : Testing with a Mock Interface Ep. 8](<https://devfeed.tech/articles/interfaces-101-testing-with-a-mock-interface-ep-8-22220.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2023/03/interfaces-101-testing-with-a-mock-interface-ep-8.html>)

Published: 2023-03-20T00:00:00Z

Content type: tutorial

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [interfaces](<https://devfeed.tech/topics/interfaces.md>), [Go Language](<https://devfeed.tech/topics/go-language.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>), [Mocking](<https://devfeed.tech/topics/mocking.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [client](<https://devfeed.tech/topics/client.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [go](<https://devfeed.tech/tags/go.md>), [golang](<https://devfeed.tech/tags/golang.md>), [health-check](<https://devfeed.tech/tags/health-check.md>), [http](<https://devfeed.tech/tags/http.md>), [http-roundtripper](<https://devfeed.tech/tags/http-roundtripper.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [mock-api](<https://devfeed.tech/tags/mock-api.md>), [tests](<https://devfeed.tech/tags/tests.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

This video tutorial explains how to design small, composable interfaces in Go and test an API client. It demonstrates performing HTTP requests and using a mock implementation to specify server response codes during unit testing.

### Source excerpt

Introduction In episode 7, Miki discussed design considerations to keep in mind while creating interfaces in Go with the first idea he proposed being that an interface should represent what we need from a type, and not what is stored on the type. To add some clarity to this thought, Miki explained how the io.Reader and io.Writer interfaces each require one method to be implemented although the underlying concrete type may store more information. The second idea he proposed was that interfaces should be small, with less than 6 methods, to ensure your code remains composable.

## Testing functions with lambdas using MockK

DevFeed: [Testing functions with lambdas using MockK](<https://devfeed.tech/articles/testing-functions-with-lambdas-using-mockk-22666.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/testing-listener-lambda-mockk>)

Author: James Shvarts

Published: 2022-12-18T15:58:29Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Mocking](<https://devfeed.tech/topics/mocking.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [callback](<https://devfeed.tech/tags/callback.md>), [function](<https://devfeed.tech/tags/function.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lambda](<https://devfeed.tech/tags/lambda.md>), [mocking](<https://devfeed.tech/tags/mocking.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

A Kotlin testing tutorial showing how to use MockK to test functions that accept success and failure lambda callbacks. It demonstrates mocking the engine, capturing or invoking callback arguments, and verifying the resulting instrument-panel behavior.

### Source excerpt

Testing Kotlin lambda invocations with MockK

## Functions in Kotlin

DevFeed: [Functions in Kotlin](<https://devfeed.tech/articles/functions-in-kotlin-39334.md>)

Original publisher: [Read original article](<https://kt.academy/article/kfde-functions>)

Published: 2022-12-12T00:01:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [function](<https://devfeed.tech/topics/function.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>), [generics](<https://devfeed.tech/topics/generics.md>), [unit test](<https://devfeed.tech/topics/unit-test.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [functions](<https://devfeed.tech/tags/functions.md>), [generics](<https://devfeed.tech/tags/generics.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [parameter](<https://devfeed.tech/tags/parameter.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

A Kotlin tutorial explaining functions as core program building blocks, including function definitions and calls, naming conventions, parameters and return types, backticks for names, single-expression syntax, and inferred result types.

### Source excerpt

Learn about what functions can offer us in Kotlin.

## Testing Kafka Connectors

DevFeed: [Testing Kafka Connectors](<https://devfeed.tech/articles/testing-kafka-connectors-18876.md>)

Original publisher: [Read original article](<https://www.morling.dev/blog/testing-kafka-connectors/>)

Published: 2022-08-25T08:20:00Z

Content type: tutorial

Language: en

Sources: [Gunnar Morling](<https://devfeed.tech/sources/gunnar-morling.md>)

Topics: [Kafka](<https://devfeed.tech/topics/kafka.md>), [Apache-Kafka](<https://devfeed.tech/topics/apache-kafka.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>)

Tags: [apache-kafka](<https://devfeed.tech/tags/apache-kafka.md>), [kafka](<https://devfeed.tech/tags/kafka.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>)

### AI overview

This article explains how to test custom Kafka Connect source connectors. It covers unit tests for connector classes and polling logic, then describes a testing harness that uses an external etcd system; similar approaches can be applied to sink connectors.

### Source excerpt

Table of Contents Unit Tests Integration Tests Wrap-Up Kafka Connect is a key factor for the wide-spread adoption of Apache Kafka: a framework and runtime environment for connectors, it makes the task of getting data either into Kafka or out of Kafka solely a matter of configuration, rather than a bespoke programming job. There's dozens, if not hundreds, of readymade source and sink connectors, allowing you to create no-code data pipelines between all kinds of databases, APIs, and other systems. There may be situations though where there is no existing connector matching your requirements, in which case you can implement your own custom connector using the Kafka Connect framework. Naturally, this raises the question of how to test such a Kafka connector, making sure it propagates the data between the connected external system and Kafka correctly and completely. In this blog post I'd like to focus on testing approaches for Kafka Connect source connectors, i.e. connectors like Debezium, which ingest data from an external system into Kafka. Very similar strategies can be employed for testing sink connectors, though.

## How to Integration Test Stored Procedures with jOOQ

DevFeed: [How to Integration Test Stored Procedures with jOOQ](<https://devfeed.tech/articles/how-to-integration-test-stored-procedures-with-jooq-28942.md>)

Original publisher: [Read original article](<https://blog.jooq.org/how-to-integration-test-stored-procedures-with-jooq/>)

Author: lukaseder

Published: 2022-08-22T12:36:00Z

Content type: tutorial

Language: en

Sources: [jOOQ](<https://devfeed.tech/sources/jooq.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Database](<https://devfeed.tech/topics/database.md>), [Testcontainers](<https://devfeed.tech/topics/testcontainers.md>), [Java](<https://devfeed.tech/topics/java.md>), [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [code-generation](<https://devfeed.tech/tags/code-generation.md>), [database](<https://devfeed.tech/tags/database.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [integration-test](<https://devfeed.tech/tags/integration-test.md>), [integration-testing](<https://devfeed.tech/tags/integration-testing.md>), [java](<https://devfeed.tech/tags/java.md>), [jooq](<https://devfeed.tech/tags/jooq.md>), [jooq-in-use](<https://devfeed.tech/tags/jooq-in-use.md>), [junit](<https://devfeed.tech/tags/junit.md>), [maven](<https://devfeed.tech/tags/maven.md>), [stored-procedures](<https://devfeed.tech/tags/stored-procedures.md>), [testcontainers](<https://devfeed.tech/tags/testcontainers.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

This tutorial explains how to integration-test database stored procedures and functions with Java, jOOQ, Testcontainers, and JUnit. It shows how to run PostgreSQL in Testcontainers, generate jOOQ classes for stored procedures, and reuse Java test infrastructure instead of manually binding to procedures through JDBC.

### Source excerpt

When you write stored procedures and functions in your database, you want to ensure their correctness, just like with your Java code. In Java, this is done with unit tests, typically with JUnit. For example, if you have the following code in Java: Then, you might write a test like this: But how do we ... Continue reading How to Integration Test Stored Procedures with jOOQ ->

## Compose Hackathon: Day 2.5

DevFeed: [Compose Hackathon: Day 2.5](<https://devfeed.tech/articles/compose-hackathon-day-2-5-30525.md>)

Original publisher: [Read original article](<https://blog.zachklipp.com/compose-hackathon-day-2-5/>)

Author: Zach Klippenstein

Published: 2022-05-04T19:49:00Z

Content type: opinion

Language: en

Sources: [Zach Klippenstein's Blog](<https://devfeed.tech/sources/zach-klippenstein-s-blog.md>)

Topics: [Hackathon](<https://devfeed.tech/topics/hackathon.md>), [Code](<https://devfeed.tech/topics/code.md>), [unit test](<https://devfeed.tech/topics/unit-test.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Java](<https://devfeed.tech/topics/java.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [hackathon](<https://devfeed.tech/tags/hackathon.md>), [java](<https://devfeed.tech/tags/java.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [spring-2022-compose-hackathon](<https://devfeed.tech/tags/spring-2022-compose-hackathon.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

A progress report from day 2.5 of a Compose hackathon describes work on abstract and concrete piece-table implementations, including snapshot support, shared unit tests, and benchmarks. It also discusses the lack of a standard Java or Kotlin interface for efficient multi-character copying.

### Source excerpt

Well, so much for blogging every day. Better late than never, right? Anyway, I have a good excuse: I've been super busy writing code and tests, and it's not going terribly. I'm calling this day 2.5 since I was up a large part

## Understanding Dependency Injection in Android Through Constructor Injection

DevFeed: [Understanding Dependency Injection in Android Through Constructor Injection](<https://devfeed.tech/articles/the-imposter-s-guide-to-dependency-injection-22842.md>)

Original publisher: [Read original article](<http://androidessence.com/the-imposter-guide-to-dependency-injection/>)

Author: Adam McNeilly

Published: 2022-01-31T00:00:00Z

Content type: tutorial

Language: en

Sources: [Android Essence](<https://devfeed.tech/sources/android-essence.md>)

Topics: [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Development](<https://devfeed.tech/topics/development.md>), [Android](<https://devfeed.tech/topics/android.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [guide](<https://devfeed.tech/tags/guide.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

This tutorial explains dependency injection in Android, beginning with tightly coupled Firebase Analytics code and its testing difficulties. It introduces constructor injection as a way to supply dependencies and use a fake implementation in tests.

### Source excerpt

Dependency Injection is one of the hottest topics in Android and software development in general. It's also a topic that can provide a lot of anxiety and create imposter syndrome for developers. In this post, we'll take incremental steps toward understanding DI, why we need it, and how to implement it inside our applications.

## Fast Reactor Tests With Virtual Time

DevFeed: [Fast Reactor Tests With Virtual Time](<https://devfeed.tech/articles/fast-reactor-tests-with-virtual-time-17700.md>)

Original publisher: [Read original article](<https://nexocode.com/blog/posts/fast-reactor-tests-with-virtual-time/>)

Author: piotr-kubowicz

Published: 2021-12-27T00:00:00Z

Content type: tutorial

Language: en

Sources: [Backend Development on nexocode](<https://devfeed.tech/sources/backend-development-on-nexocode.md>)

Topics: [reactive](<https://devfeed.tech/topics/reactive.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Code](<https://devfeed.tech/topics/code.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [asynchronous](<https://devfeed.tech/tags/asynchronous.md>), [code](<https://devfeed.tech/tags/code.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [network](<https://devfeed.tech/tags/network.md>), [programming](<https://devfeed.tech/tags/programming.md>), [reactive](<https://devfeed.tech/tags/reactive.md>), [reactive-programming](<https://devfeed.tech/tags/reactive-programming.md>), [reactive-streams](<https://devfeed.tech/tags/reactive-streams.md>), [testing](<https://devfeed.tech/tags/testing.md>), [timeout](<https://devfeed.tech/tags/timeout.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

This tutorial explains how to use Project Reactor's Virtual Time and StepVerifier to test delayed and asynchronous reactive code without waiting for real time to pass. It also discusses controlling external storage behavior and the limitations of polling-based test approaches.

### Source excerpt

Sometimes your code deals with a situation when things happen slowly. Maybe you schedule a background task that runs after some time. Or run a special action when asking for data that takes far too long. Either way, it is a tricky case that needs to be tested well. But what to do if we don't want a test that waits a lot? Project Reactor, a reactive programming library for JVM, handles concurrency in a high-level and declarative fashion. Its test utility, StepVerifier, allows using Virtual Time: 'mock' the clock and advance time in your tests faster than the system clock runs.

## Why Square Uses the Workflow Application Framework

DevFeed: [Why Square Uses the Workflow Application Framework](<https://devfeed.tech/articles/why-workflow-15962.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/why-workflow>)

Author: Stephen Edwards

Published: 2021-08-19T21:00:00Z

Content type: opinion

Language: en

Sources: [Square Corner Blog](<https://devfeed.tech/sources/square-corner-blog-medium.md>), [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [Framework](<https://devfeed.tech/topics/framework.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Software](<https://devfeed.tech/topics/software.md>), [unit test](<https://devfeed.tech/topics/unit-test.md>)

Tags: [debug](<https://devfeed.tech/tags/debug.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [framework](<https://devfeed.tech/tags/framework.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [software](<https://devfeed.tech/tags/software.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

Square explains why it uses the Workflow application framework: to improve software clarity, correctness, and testability at scale, while encouraging programming practices suited to mobile development.

### Source excerpt

Or why does Square make its own application framework?

## Testing Apollo Client Applications

DevFeed: [Testing Apollo Client Applications](<https://devfeed.tech/articles/testing-apollo-client-applications-23430.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/introduction-to-testing>)

Author: Khalil Stemmler

Published: 2021-04-22T17:54:59Z

Content type: tutorial

Language: en

Sources: [Apollo Blog](<https://devfeed.tech/sources/apollo-blog.md>)

Topics: [apollo-client](<https://devfeed.tech/topics/apollo-client.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>), [React](<https://devfeed.tech/topics/react.md>), [GraphQL](<https://devfeed.tech/topics/graphql.md>)

Tags: [apollo-client](<https://devfeed.tech/tags/apollo-client.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [integration](<https://devfeed.tech/tags/integration.md>), [react](<https://devfeed.tech/tags/react.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>)

### AI overview

A tutorial on testing Apollo Client applications with unit, integration, and end-to-end tests. It explains what each approach tests, their tradeoffs, and how they fit into a comprehensive testing strategy, with examples focused on React components and mocked GraphQL responses.

### Source excerpt

Testing is likely one of the most important (yet challenging) aspects of developing high-quality software that can safely withstand change. Tests give you confidence that your code works and will continue to work -- even as you add new features over time. This article will discuss three different approaches to testing Apollo Client applications: unit, integration, and end-to-end tests. We'll discuss what they test, their tradeoffs, and where they belong within a comprehensive testing strategy.

## Finding the right abstraction (when working with Strings)

DevFeed: [Finding the right abstraction (when working with Strings)](<https://devfeed.tech/articles/finding-the-right-abstraction-when-working-with-strings-25436.md>)

Original publisher: [Read original article](<https://hannesdorfmann.com/abstraction-text-resource/>)

Author: Hannes Dorfmann

Published: 2021-01-22T09:00:00Z

Content type: tutorial

Language: en

Sources: [Hannes Dorfmann](<https://devfeed.tech/sources/hannes-dorfmann.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [unit test](<https://devfeed.tech/topics/unit-test.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [ui](<https://devfeed.tech/tags/ui.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

A tutorial on introducing an abstraction layer for Android string resources. It explains how to handle simple, formatted, translated, and backend-provided text consistently, while keeping implementation details out of business logic and making ViewModels easier to test.

### Source excerpt

Finding the right abstraction is hard. In this blog post, I would like to share a technique that works well for us (my android teammates and me) when dealing with String resources on android. An abstraction layer for Strings? Why do we even need an abstraction to simply work with Strings on Android?

## Test-Commit-Revert: A useful workflow for testing legacy code in Ruby

DevFeed: [Test-Commit-Revert: A useful workflow for testing legacy code in Ruby](<https://devfeed.tech/articles/test-commit-revert-a-useful-workflow-for-testing-legacy-code-in-ruby-20055.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/ruby-tcr-test-commit-revert/>)

Author: José M. Gilgado

Published: 2020-10-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [bridgetown](<https://devfeed.tech/topics/bridgetown.md>), [Test coverage](<https://devfeed.tech/topics/coverage.md>), [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [code](<https://devfeed.tech/tags/code.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [ruby-articles](<https://devfeed.tech/tags/ruby-articles.md>), [tdd](<https://devfeed.tech/tags/tdd.md>), [techniques](<https://devfeed.tech/tags/techniques.md>), [test-coverage](<https://devfeed.tech/tags/test-coverage.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

This article explains test-commit-revert (TCR), a workflow for adding tests to legacy Ruby code. Tests run automatically when files are saved: passing changes are committed, while failing changes are reverted. The technique aims to improve understanding, increase test coverage, and enable refactoring while keeping the code in a passing state.

### Source excerpt

When you inherit a legacy app with no tests, your first step should be to add them. But that can be a huge task! How do you even start? In this article, José will introduce us to a testing workflow called test-commit-revert (TCR) that is particularly useful for adding tests to legacy systems. Read to see practical examples and how to set up your tooling for minimal friction.

## go test -v streaming output

DevFeed: [go test -v streaming output](<https://devfeed.tech/articles/go-test-v-streaming-output-20828.md>)

Original publisher: [Read original article](<https://dave.cheney.net/2020/03/10/go-test-v-streaming-output>)

Author: Dave Cheney

Published: 2020-03-10T07:03:03Z

Content type: article

Language: en

Sources: [Dave Cheney](<https://devfeed.tech/sources/dave-cheney.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Streaming](<https://devfeed.tech/topics/streaming.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>)

Tags: [go](<https://devfeed.tech/tags/go.md>), [go-test](<https://devfeed.tech/tags/go-test.md>), [integration](<https://devfeed.tech/tags/integration.md>), [programming](<https://devfeed.tech/tags/programming.md>), [retry](<https://devfeed.tech/tags/retry.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>), [streaming](<https://devfeed.tech/tags/streaming.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>)

### AI overview

The article explains that Go 1.14 streams test output as it is produced when using -v, instead of buffering output until the test finishes. This improves visibility when debugging long-running or retrying integration tests.

### Source excerpt

The testing package is one of my favourite packages in the Go standard library, not just because of its low noise approach to unit testing, but, over the lifetime of Go, it has received a steady stream of quality of life improvements driven by real world usage. The most recent example of this is, in [...]

## Record/Replay testing in Sorbet

DevFeed: [Record/Replay testing in Sorbet](<https://devfeed.tech/articles/record-replay-testing-in-sorbet-21960.md>)

Original publisher: [Read original article](<https://blog.nelhage.com/post/record-replay-in-sorbet/>)

Author: Nelson Elhage

Published: 2020-01-13T18:00:00Z

Content type: article

Language: en

Sources: [Nelson Elhage](<https://devfeed.tech/sources/nelson-elhage.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [stripe](<https://devfeed.tech/topics/stripe.md>), [Development](<https://devfeed.tech/topics/development.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [2017](<https://devfeed.tech/tags/2017.md>), [case-study](<https://devfeed.tech/tags/case-study.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [git](<https://devfeed.tech/tags/git.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [quality](<https://devfeed.tech/tags/quality.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [stripe](<https://devfeed.tech/tags/stripe.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

This article describes Sorbet's record/replay testing strategy. The framework records a typechecker's output for example Ruby programs, stores that output in Git, and replays the examples to compare later results.

### Source excerpt

In 2017 and 2018, I (along with Paul Tarjan and Dmitry Petrashko) was a founding member of the Sorbet project at Stripe to build a gradual static typechecking system for Ruby, with the aim of enhancing productivity on Stripe's millions of lines of Ruby, and eventually producing a useful open-source tool. I'm very proud of the work we did (and that others continue to do!) on Sorbet; I think we were very successful, and it was one of the best teams I've worked on in a number of ways.

[Next page](<https://devfeed.tech/tags/unit-test.md?cursor=WyIyMDIwLTAxLTEzVDE4OjAwOjAwKzAwOjAwIiwgIjA0YmRlYjI1LTU0ODEtNGFkYi1hYjM5LTc4NmE3ZTdmZDkxNSJd>)