<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Code coverage for black-box tests, in any language on tomato blog</title><link>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/</link><description>Recent content in Code coverage for black-box tests, in any language on tomato blog</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 21 Oct 2026 03:00:00 +0200</lastBuildDate><atom:link href="https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/index.xml" rel="self" type="application/rss+xml"/><item><title>Code coverage of tomato tests: Go</title><link>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/go/</link><pubDate>Wed, 21 Oct 2026 03:00:00 +0200</pubDate><guid>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/go/</guid><description>Build with -cover, point GOCOVERDIR at a directory, and go tool covdata reads what ran. No agent, nothing in the code.</description></item><item><title>Code coverage of tomato tests: Rust</title><link>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/rust/</link><pubDate>Wed, 21 Oct 2026 03:00:00 +0200</pubDate><guid>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/rust/</guid><description>Build with LLVM&amp;rsquo;s source-based coverage, set LLVM_PROFILE_FILE, and read the profile with the toolchain&amp;rsquo;s own llvm-profdata and llvm-cov.</description></item><item><title>Code coverage of tomato tests: the JVM (Kotlin, Java, Scala)</title><link>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/jvm/</link><pubDate>Wed, 21 Oct 2026 03:00:00 +0200</pubDate><guid>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/jvm/</guid><description>Nothing to rebuild: the JaCoCo agent instruments classes as they load and writes its data from a shutdown hook, which the JVM runs on SIGTERM by itself.</description></item><item><title>Code coverage of tomato tests: Python</title><link>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/python/</link><pubDate>Wed, 21 Oct 2026 03:00:00 +0200</pubDate><guid>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/python/</guid><description>coverage.py&amp;rsquo;s startup hook measures any Python process that sees COVERAGE_PROCESS_START, so the command in tomato.yml stays exactly as it is.</description></item><item><title>Code coverage of tomato tests: Node.js</title><link>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/nodejs/</link><pubDate>Wed, 21 Oct 2026 03:00:00 +0200</pubDate><guid>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/nodejs/</guid><description>Coverage is built into Node: set NODE_V8_COVERAGE and V8 writes what ran when the process exits. c8 turns it into reports. Just make sure the process does exit.</description></item><item><title>Code coverage of tomato tests: other languages</title><link>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/other-languages/</link><pubDate>Wed, 21 Oct 2026 03:00:00 +0200</pubDate><guid>https://tomatool.github.io/blog/posts/code-coverage-for-black-box-tests/other-languages/</guid><description>The same shape works wherever the runtime can write coverage when the process ends: .NET, Ruby, PHP and C/C++, with what is different about each.</description></item></channel></rss>