Agent skill

Functional Testing

by OpenCoreMMO in OpenCoreMMO/OpenCoreMMO

Write, fix, or review NeoServer functional tests that start from the network handler and run against the real server stack.

GPL-3.0Auto-check passedTesting & QA

Install Functional Testing

skills CLI
$ npx skills add OpenCoreMMO/OpenCoreMMO --skill functional-testing -a claude-code

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

GitHub CLI
$ gh skill install OpenCoreMMO/OpenCoreMMO functional-testing --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/OpenCoreMMO/OpenCoreMMO.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/functional-testing .claude/skills/functional-testing && 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
functional-testing
GitHub stars
481
Token cost
~1.1k tokens
SKILL.md length
416 words
Files
1
Skills in repo
4
Repo updated
First seen
Licence
GPL-3.0

At a glance

Write, fix, or review NeoServer functional tests that start from the network handler and run against the real server stack.

  • The user wants end-to-end style coverage without mocks
  • SKILL.md covers Scope, Core Rule, Reference Pattern and Workflow, plus 6 more sections
  • Calls dotnet
  • Including login

What it does

Functional Testing is an agent skill from OpenCoreMMO/OpenCoreMMO. Write, fix, or review NeoServer functional tests that start from the network handler and run against the real server stack. Use this skill when the user wants end-to-end style coverage without mocks, including login, packet handling, persistence, routines, and other server flows exercised through real dependency injection and the test container.

Its SKILL.md is about 1.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Requires .NET 10 SDK and dotnet CLI. Designed for NeoServer project conventions.

It sits in Testing & QA, covering Design patterns. It works with .NET. The repository describes itself as: Modern MMORPG server emulator written in C. The licence is GPL-3.0.

When your agent uses it

  • The user wants end-to-end style coverage without mocks
  • Including login
  • Packet handling
  • Other server flows exercised through real dependency injection and the test container

Example prompts

  • “/functional-testing”

Requirements

  • Compatibility (from SKILL.md): Requires .NET 10 SDK and dotnet CLI. Designed for NeoServer project conventions.

What it can do on your machine

Read from SKILL.md and the folder at commit 1d485f7. 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

    Shell commands in SKILL.md call:

    • dotnet

    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.

  • Compatibility

    Requires .NET 10 SDK and dotnet CLI. Designed for NeoServer project conventions.

    From compatibility in the SKILL.md frontmatter.

Context cost

Functional Testing loads about 1.1k tokens when it runs. Until then it costs about 92 tokens; SKILL.md has 416 words of instructions outside code blocks.

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

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 OpenCoreMMO/OpenCoreMMO at commit 1d485f7, republished under its GPL-3.0 licence (© OpenCoreMMO). 416 words, ~1,108 tokens.

Download SKILL.mdSave it as .claude/skills/functional-testing/SKILL.md (or your agent's skills folder).
name
functional-testing
description
Write, fix, or review NeoServer functional tests that start from the network handler and run against the real server stack. Use this skill when the user wants end-to-end style coverage without mocks, including login, packet handling, persistence, routines, and other server flows exercised through real dependency injection and the test container.
compatibility
Requires .NET 10 SDK and dotnet CLI. Designed for NeoServer project conventions.

Scope

Functional tests in this repo:

  • Start from the network handler or top-level command path
  • Use the real DI container and real infrastructure where practical
  • Do not mock domain entities, services, commands, or the game server stack
  • Prefer real packets, real handlers, real routines, and real database access
  • Assert against game state, packet output, and persisted data

Core Rule

If the test can be expressed through the real server path, do that.

  • Use the real TestSetup.Setup() container when the flow needs a full boot
  • Use the real PlayerLogInCommand / handlers / routines
  • Avoid Moq unless you are testing an infrastructure boundary that cannot be real

Reference Pattern

Use tests/NeoServer.Server.Tests/Login/PlayerLoginTests.cs as the canonical example.

It shows:

  • Full container boot via TestSetup.Setup()
  • Real NeoContext, IGameServer, and commands from DI
  • SkipOnGitHubActionsFactAttribute for tests that need the full environment
  • Assertions over packet sends, map placement, database state, and runtime behavior
Key setup pattern
csharp
_container = TestSetup.Setup().Result;
_command = _container.GetService<PlayerLogInCommand>();
_game = _container.GetService<IGameServer>();
_context = _container.GetService<NeoContext>();

Workflow

  • 1. Identify the entry point: network handler, command, or routine
  • 2. Decide whether the test needs the full container or a narrower integration harness
  • 3. Use real packets and real server objects wherever possible
  • 4. Keep assertions on visible outcomes: packets, database rows, map placement, game state
  • 5. Add SkipOnGitHubActionsFact if the test needs full boot or is environment-sensitive
  • 6. Run dotnet test tests/NeoServer.Server.Tests

Test Style

Use AAA and behavioral names.

csharp
[Fact]
[Trait("Category", "Integration")]
public async Task Player_gets_placed_on_map_when_login_succeeds()
{
    // Arrange
    _game.Open();

    var timestamp = (uint)DateTimeOffset.UtcNow.ToUnixTimeSeconds();
    var randomNumber = (byte)123;
    var connection = CreateMockConnection(timestamp, randomNumber);
    var request = CreatePlayerLogInRequest(timestamp, randomNumber);

    // Act
    var (success, message) = await _command.Execute(request, connection.Object);

    // Assert
    success.Should().BeTrue();
    message.Should().BeNull();
}

Test Data

  • Prefer existing builders and fixtures from tests/NeoServer.Domain.Tests/Helpers/
  • Prefer TestSetup for full server state
  • Use direct packet instances when a handler expects them
  • Use real entities from the database seed when validating persistence
Show full SKILL.md (163 more words)Show less

Mocking Policy

Do not mock:

  • Domain entities (IPlayer, IMonster, IItem)
  • Services
  • Commands
  • Game server internals

Only mock when the boundary is external or infrastructure-level and the real dependency is not practical to use:

  • IConnection
  • IEventAggregator if you need to intercept publish behavior
  • Repository interfaces when the test intentionally isolates persistence

Assertions

Prefer assertions that verify the end result of the flow:

  • player loaded and placed on map
  • connection receives or does not receive specific packets
  • database fields updated
  • runtime state changed as expected
  • no duplicate player instances after reconnect

Avoid asserting internal implementation details unless the test is specifically about that behavior.

Common Scenarios

  • Login success and rejection paths
  • Packet-to-command execution
  • Condition application and expiry through real handlers/routines
  • Persistence updates after gameplay actions
  • Reconnect behavior
  • World placement and creature visibility

When to Use Unit Tests Instead

If the behavior is purely internal logic and does not need the server boot or packet path, prefer unit tests under NeoServer.Domain.Tests or the relevant test project.

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

Files

Just SKILL.md in .agents/skills/functional-testing of OpenCoreMMO/OpenCoreMMO.

Open the folder on GitHubat commit 1d485f7

Compare with similar skills

Functional Testing 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.

Functional Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Functional Testing this skillOpenCoreMMO/OpenCoreMMO481—~1.1kAutomated safety check: PassGPL-3.0
Scaffoldcodewithmukesh/dotnet-claude-kit751—~1.7kAutomated safety check: PassMIT
Maui Dependency Injectiondotnet/skills5.6k1 repos~3.6kAutomated safety check: PassMIT
GitVersion .NET DevelopmentGitTools/GitVersion3.1k—~1.7kAutomated safety check: PassMIT
Aspnet Corefanslead/ReverseProxy.Store1632 repos~1.4kAutomated safety check: PassApache-2.0
Architecture Advisorcodewithmukesh/dotnet-claude-kit7511 repos~2.9kAutomated safety check: PassMIT

Similar skills

  • Scaffold

    codewithmukesh/dotnet-claude-kit

    Architecture-aware feature scaffolding for .NET 10 projects.

    751 GitHub stars~1.7k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Official

    Guidance for configuring dependency injection in .NET MAUI apps — service registration in MauiProgram.cs, lifetime selection (Singleton / Transient / Scoped), constructor injection, Shell navigation…

    5.6k GitHub starsUsed in 1 repo~3.6k tokens
    MobileAuto-check passed
  • GitVersion .NET Development

    GitTools/GitVersion

    Gives repository-specific .NET guidance for GitVersion: build and test commands, central package management, project layout and coding conventions.

    3.1k GitHub stars~1.7k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Aspnet Core

    fanslead/ReverseProxy.Store

    Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development.

    163 GitHub starsUsed in 2 repos~1.4k tokens
    Backend & APIsAuto-check passed
  • Architecture Advisor

    codewithmukesh/dotnet-claude-kit

    Architecture selection advisor for .NET applications. An agent skill from codewithmukesh/dotnet-claude-kit.

    751 GitHub starsUsed in 1 repo~2.9k tokens
    DevelopmentAuto-check passed
  • Akka.Hosting Actor Patterns

    Aaronontheweb/dotnet-skills

    Shows how to build entity actors with Akka.Hosting so the same code runs in local unit tests and in a sharded cluster in production.

    1.2k GitHub starsUsed in 1 repo~5k tokens
    DevelopmentAuto-check passed

More from OpenCoreMMO/OpenCoreMMO

  • Pull Request

    OpenCoreMMO/OpenCoreMMO

    Create a pull request for OpenCoreMMO following the project's PR template.

    481 GitHub stars~814 tokensUpdated 15 days ago
    Auto-check passed
  • Unit Testing

    OpenCoreMMO/OpenCoreMMO

    Write, fix, or review NeoServer unit tests using xUnit and FluentAssertions.

    481 GitHub stars~1.6k tokensUpdated 15 days ago
    Auto-check passed
  • Code Review

    OpenCoreMMO/OpenCoreMMO

    Review pull requests and code changes for OpenCoreMMO against the project's architecture, conventions, and style defined in AGENTS.md.

    481 GitHub stars~3.9k tokensUpdated 15 days ago
    Auto-check passed

Works with

Categories

Questions about Functional Testing

What does Functional Testing do?

Write, fix, or review NeoServer functional tests that start from the network handler and run against the real server stack. Functional Testing is an agent skill from OpenCoreMMO/OpenCoreMMO. Write, fix, or review NeoServer functional tests that start from the network handler and run against the real server stack.

When should I use Functional Testing?

Functional Testing fits situations like: the user wants end-to-end style coverage without mocks; including login; packet handling; other server flows exercised through real dependency injection and the test container.

How do I install Functional Testing in Claude Code?

Run `npx skills add OpenCoreMMO/OpenCoreMMO --skill functional-testing -a claude-code`. Or copy the skill folder (.agents/skills/functional-testing in OpenCoreMMO/OpenCoreMMO) into .claude/skills/functional-testing in your project. Claude Code loads it when a task matches its description.

How do I install Functional Testing in Codex?

Run `npx skills add OpenCoreMMO/OpenCoreMMO --skill functional-testing -a codex`. Or copy the skill folder (.agents/skills/functional-testing in OpenCoreMMO/OpenCoreMMO) into .agents/skills/functional-testing in your project. Codex loads it when a task matches its description.

Can I use Functional Testing 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 OpenCoreMMO/OpenCoreMMO --skill functional-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/functional-testing, .gemini/skills/functional-testing, .github/skills/functional-testing and .opencode/skills/functional-testing in your project.

What does Functional Testing need to run?

Going by SKILL.md and its folder, Functional Testing needs the command-line tools its instructions call (dotnet). Compatibility (from SKILL.md): Requires .NET 10 SDK and dotnet CLI. Designed for NeoServer project conventions..

Does Functional Testing 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 Functional Testing 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 Functional Testing use?

Functional Testing is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Functional Testing use?

About 1.1k tokens (SKILL.md is roughly 4.4k 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 Functional Testing?

Skills that share tags, products or a category with Functional Testing: Scaffold (codewithmukesh/dotnet-claude-kit, 751 stars), Maui Dependency Injection (dotnet/skills, 5.6k stars), GitVersion .NET Development (GitTools/GitVersion, 3.1k stars) and Aspnet Core (fanslead/ReverseProxy.Store, 163 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Functional Testing?

OpenCoreMMO (a GitHub organization) maintains it in OpenCoreMMO/OpenCoreMMO, which has 481 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on September 22, 2026.

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