Agent skill

Dotnet Test Doubles

by macalbert in macalbert/envilder

Test doubles including Fakes (Bogus), Dummies (AutoFixture), Stubs, Spies, and Mocks (NSubstitute).

MITAuto-check passedTesting & QA

Install Dotnet Test Doubles

skills CLI
$ npx skills add macalbert/envilder --skill dotnet-test-doubles -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install macalbert/envilder dotnet-test-doubles --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/macalbert/envilder.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/dotnet-test-doubles .claude/skills/dotnet-test-doubles && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
dotnet-test-doubles
GitHub stars
138
Token cost
~1.4k tokens
SKILL.md length
246 words
Files
2
Skills in repo
30
Repo updated
First seen
Licence
MIT

At a glance

Test doubles including Fakes (Bogus), Dummies (AutoFixture), Stubs, Spies, and Mocks (NSubstitute).

  • Works in 6 steps: Fake - Bogus → Dummy - AutoFixture → Stub - AutoFixture / NSubstitute → …
  • Creating test data
  • SKILL.md covers Code Style Rules, Test Doubles Types, NSubstitute Patterns and Mother Pattern with Bogus, plus 1 more section
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Dotnet Test Doubles is an agent skill from macalbert/envilder. Test doubles including Fakes (Bogus), Dummies (AutoFixture), Stubs, Spies, and Mocks (NSubstitute). Use when creating test data, mocking dependencies, or setting up HTTP mocks with WireMock.Net.

Its SKILL.md is about 1.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `reference.md`).

It sits in Testing & QA, covering Unit testing and Test data and fixtures. It works with .NET. The repository describes itself as: One secret mapping for local dev, CI/CD, and runtime. Envilder resolves cloud secrets from your own vaults without SaaS middlemen, duplicated config, or .env drift. The licence is MIT.

When your agent uses it

  • Creating test data
  • Mocking dependencies
  • Setting up HTTP mocks with WireMock.Net

Example prompts

  • “/dotnet-test-doubles”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Fake - Bogus
  2. Dummy - AutoFixture
  3. Stub - AutoFixture / NSubstitute
  4. Spy - NSubstitute
  5. Mock - NSubstitute
  6. HTTP Mocks - WireMock.Net

What it can do on your machine

Read from SKILL.md and the folder at commit b6a0327. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are csharp).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Dotnet Test Doubles loads about 1.4k tokens when it runs. Until then it costs about 54 tokens; SKILL.md has 246 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~54
When it runs · the whole SKILL.md, loaded when a task matches
~1.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from macalbert/envilder at commit b6a0327, republished under its MIT licence (© macalbert). 246 words, ~1,436 tokens.

Download SKILL.mdSave it as .claude/skills/dotnet-test-doubles/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
dotnet-test-doubles
description
Test doubles including Fakes (Bogus), Dummies (AutoFixture), Stubs, Spies, and Mocks (NSubstitute). Use when creating test data, mocking dependencies, or setting up HTTP mocks with WireMock.Net.

Test Doubles

This skill defines how to use test doubles (Fakes, Dummies, Stubs, Spies, and Mocks).

Code Style Rules

NEVER write unnecessary comments or XML summaries. Code should be self-explanatory.

RuleExample
Use class not recordpublic class GroupMother { ... }
Always use {} bracketsif (x) { return; } never if (x) return;
Aligned wrapped parametersAlign parameters with opening parenthesis

Test Doubles Types

1. Fake - Bogus

Use Bogus to create realistic fake data for testing.

Purpose: Generate realistic test data that mimics production data.

Example:

csharp
using Bogus;

public sealed class GroupMother
{
    private readonly Faker _faker;

    public GroupMother(int seed = 666)
    {
        _faker = new Faker { Random = new Randomizer(seed) };
    }

    public Group Create()
    {
        return Group.Create(
            id: _faker.Random.Guid(),
            name: _faker.Commerce.ProductName(),
            type: _faker.PickRandom<GroupType>()
        );
    }
}
2. Dummy - AutoFixture

Use AutoFixture for dummy objects that fill method parameters.

Purpose: Automatically generate objects without manual setup.

Example:

csharp
public class CreateGroupCommandHandlerTests
{
    private readonly Fixture _fixture;

    public CreateGroupCommandHandlerTests()
    {
        _fixture = new Fixture();
    }

    [Fact(Timeout = CancellationTokenForTest.ShortTimeout)] 
    public async Task Should_CreateGroup_When_RequestIsValid()
    {
        // Arrange
        var secretName = _fixture.Create<string>();
        var secretValue = _fixture.Create<string>();
        // ...
    }
}
3. Stub - AutoFixture / NSubstitute

Use AutoFixture or NSubstitute for stubs that return predefined data.

Example with NSubstitute:

csharp
// Arrange
_repository
    .GetGroupByIdAsync(Arg.Any<Guid>(), Arg.Any<CancellationToken>())
    .Returns(GroupMother.Create(id: expectedId));
4. Spy - NSubstitute

Use NSubstitute to spy on method calls and verify interactions.

Example:

csharp
// Arrange
var logger = Substitute.For<ILogger<CreateGroupCommandHandler>>();

// Act
await _sut.Handle(command, CancellationToken.None);

// Assert - Verify logger was called
logger.Received(1).Log(
    LogLevel.Information,
    Arg.Any<EventId>(),
    Arg.Is<object>(o => o.ToString()!.Contains("Creating group")),
    Arg.Any<Exception>(),
    Arg.Any<Func<object, Exception?, string>>());
5. Mock - NSubstitute

Use NSubstitute for mocks that verify expected behavior.

Example:

csharp
// Arrange
_repository
    .GetGroupByIdAsync(groupId, Arg.Any<CancellationToken>())
    .Returns(group);

// Act
var actual = await _sut.Handle(query, CancellationToken.None);

// Assert
await _repository.Received(1).GetGroupByIdAsync(groupId, Arg.Any<CancellationToken>());
6. HTTP Mocks - WireMock.Net

Use WireMock.Net for mocking HTTP services.

Example:

csharp
// Setup WireMock
_wireMock
    .Given(Request.Create()
        .WithPath("/secrets/my-secret")
        .UsingGet())
    .RespondWith(Response.Create()
        .WithStatusCode(200)
        .WithBodyAsJson(new { value = "secret-value" }));

// Test HTTP client
var response = await _httpClient.GetAsync("/secrets/my-secret");

NSubstitute Patterns

Basic Mocking
csharp
// Create mock
var repository = Substitute.For<IEnvilderRepository>();

// Setup return value
repository
    .GetGroupByIdAsync(groupId, Arg.Any<CancellationToken>())
    .Returns(group);

// Verify call
await repository.Received(1).GetGroupByIdAsync(groupId, Arg.Any<CancellationToken>());

// Verify NOT called
await repository.DidNotReceive().DeleteGroup(Arg.Any<Group>());
Argument Matchers
csharp
// Any argument
repository.GetGroupByIdAsync(Arg.Any<Guid>(), Arg.Any<CancellationToken>());

// Specific value
repository.GetGroupByIdAsync(specificId, Arg.Any<CancellationToken>());

// Conditional matching
repository.GetGroupByIdAsync(
    Arg.Is<Guid>(id => id != Guid.Empty),
    Arg.Any<CancellationToken>());

For more details on AutoFixture and Bogus patterns, see reference.md.

Mother Pattern with Bogus

csharp
public sealed class GroupMother
{
    private readonly Faker _faker;

    public GroupMother(int seed = 666)
    {
        _faker = new Faker { Random = new Randomizer(seed) };
    }

    public Group Create(
        Guid? id = null,
        string? name = null,
        GroupType? type = null)
    {
        return Group.Create(
            id: id ?? _faker.Random.Guid(),
            name: name ?? _faker.Commerce.ProductName(),
            type: type ?? _faker.PickRandom<GroupType>()
        );
    }

    public IEnumerable<Group> CreateMany(int count = 10)
    {
        for (var i = 0; i < count; i++)
        {
            yield return Create();
        }
    }
}

Summary

  • Bogus for realistic fake data
  • AutoFixture for dummy and stub objects
  • NSubstitute for spies and mocks
  • WireMock.Net for HTTP mocks
  • Mother pattern for reusable test data builders
  • Verify interactions using .Received()
  • Argument matchers for flexible verification

When writing tests:

  1. Use Mother pattern for domain entities
  2. Use AutoFixture for simple data
  3. Use Bogus for realistic data
  4. Use NSubstitute for all mocks/spies
  5. Always verify mock interactions

© macalbert, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .github/skills/dotnet-test-doubles of macalbert/envilder.

  • SKILL.md
  • reference.md

Open the folder on GitHubat commit b6a0327

Compare with similar skills

Dotnet Test Doubles next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Dotnet Test Doubles compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dotnet Test Doubles this skillmacalbert/envilder138—~1.4kAutomated safety check: PassMIT
Aspire Integration TestingDevBetterCom/DevBetterWeb1572 repos~2.3kAutomated safety check: PassNone
Scaffolding Oracle To Postgres Migration Test Projectgithub/awesome-copilot40k—~687Automated safety check: PassMIT
Scaffolding Oracle To Postgres Migration Test Projectboshi-xixixi/TraeSkill274—~632Automated safety check: PassMIT
Jest Testing PatternsChrisWiles/claude-code-showcase6.1k7 repos~1.5kAutomated safety check: PassNone
RTK Filter TDD in Rustrtk-ai/rtk83k—~1.9kAutomated safety check: NotesApache-2.0

Similar skills

  • Aspire Integration Testing

    DevBetterCom/DevBetterWeb

    Write integration tests using .NET Aspire's testing facilities with xUnit.

    157 GitHub starsUsed in 2 repos~2.3k tokens
    Testing & QAAuto-check passed
  • Scaffolds an xUnit integration test project for validating Oracle-to-PostgreSQL database migration behavior in .NET solutions.

    274 GitHub stars~632 tokensUpdated 4 mo ago
    Testing & QAAuto-check passed
  • Jest Testing Patterns

    ChrisWiles/claude-code-showcase

    Jest patterns for React Native style tests: TDD discipline, mock factory functions, module and GraphQL hook mocking, custom render helpers and anti-patterns to avoid.

    6.1k GitHub starsUsed in 7 repos~1.5k tokens
    Testing & QAAuto-check passed
  • Enforces red-green-refactor for new RTK output filters in Rust, using real captured fixtures, snapshot tests with insta and token-savings assertions.

    83k GitHub stars~1.9k tokensUpdated today
    Testing & QAAuto-check: notes
  • New Event Source

    aws/aws-lambda-dotnet

    Official

    Add a new AWS event source attribute (e.g., Kinesis, Kafka, MQ) to the Lambda .NET Annotations framework, including the attribute class, source generator integration, CloudFormation writer, unit…

    1.7k GitHub stars~3k tokensUpdated today
    Testing & QAAuto-check passed

More from macalbert/envilder

All 30 skills in this repo
  • Code Review Perspectives

    macalbert/envilder

    Five independent analysis perspectives for code review: correctness, architecture, security, conventions, and complexity.

    138 GitHub stars~1k tokensUpdated 2 days ago
    Auto-check passed
  • Index of Architecture Decision Records (ADRs) for cross-cutting technical decisions.

    138 GitHub stars~1.3k tokensUpdated 2 days ago
    Auto-check passed
  • Common Git

    macalbert/envilder

    Git commit messages, PR workflow, and branching strategy using Conventional Commits and Semantic Versioning.

    138 GitHub stars~991 tokensUpdated 2 days ago
    Auto-check passed
  • Common Testing Conventions

    macalbert/envilder

    Mandatory testing conventions including the narrow diagnostic exception for testing test-only code, AAA pattern, test naming, and assertions across all stacks (.NET, TypeScript, Python).

    138 GitHub stars~1.9k tokensUpdated 2 days ago
    Auto-check passed
  • Doc Maintenance

    macalbert/envilder

    Workflow for maintaining changelogs, READMEs, and documentation files.

    138 GitHub stars~904 tokensUpdated 2 days ago
    Auto-check passed
  • Doc Sync

    macalbert/envilder

    Audit and synchronize documentation across website, READMEs, and docs/.

    138 GitHub stars~1.3k tokensUpdated 2 days ago
    Auto-check passed

Works with

Categories

Questions about Dotnet Test Doubles

What does Dotnet Test Doubles do?

Test doubles including Fakes (Bogus), Dummies (AutoFixture), Stubs, Spies, and Mocks (NSubstitute). Dotnet Test Doubles is an agent skill from macalbert/envilder. Test doubles including Fakes (Bogus), Dummies (AutoFixture), Stubs, Spies, and Mocks (NSubstitute).

When should I use Dotnet Test Doubles?

Dotnet Test Doubles fits situations like: creating test data; mocking dependencies; setting up HTTP mocks with WireMock.Net.

How do I install Dotnet Test Doubles in Claude Code?

Run `npx skills add macalbert/envilder --skill dotnet-test-doubles -a claude-code`. Or copy the skill folder (.github/skills/dotnet-test-doubles in macalbert/envilder) into .claude/skills/dotnet-test-doubles in your project. Claude Code loads it when a task matches its description.

How do I install Dotnet Test Doubles in Codex?

Run `npx skills add macalbert/envilder --skill dotnet-test-doubles -a codex`. Or copy the skill folder (.github/skills/dotnet-test-doubles in macalbert/envilder) into .agents/skills/dotnet-test-doubles in your project. Codex loads it when a task matches its description.

Can I use Dotnet Test Doubles in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add macalbert/envilder --skill dotnet-test-doubles -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dotnet-test-doubles, .gemini/skills/dotnet-test-doubles, .github/skills/dotnet-test-doubles and .opencode/skills/dotnet-test-doubles in your project.

What does Dotnet Test Doubles need to run?

SKILL.md names no scripts, command-line tools or credentials: Dotnet Test Doubles is instructions for the agent only.

Does Dotnet Test Doubles access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Dotnet Test Doubles safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Dotnet Test Doubles use?

Dotnet Test Doubles is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Dotnet Test Doubles use?

About 1.4k tokens (SKILL.md is roughly 5.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Dotnet Test Doubles?

Skills that share tags, products or a category with Dotnet Test Doubles: Aspire Integration Testing (DevBetterCom/DevBetterWeb, 157 stars), Scaffolding Oracle To Postgres Migration Test Project (github/awesome-copilot, 40k stars), Scaffolding Oracle To Postgres Migration Test Project (boshi-xixixi/TraeSkill, 274 stars) and Jest Testing Patterns (ChrisWiles/claude-code-showcase, 6.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dotnet Test Doubles?

macalbert (a GitHub user) maintains it in macalbert/envilder, which has 138 GitHub stars. The repository holds 30 skills in this directory. The repository was last updated on October 5, 2026.

Source: macalbert/envilder on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.