gdUnit4.api
5.0.0
dotnet add package gdUnit4.api --version 5.0.0
NuGet\Install-Package gdUnit4.api -Version 5.0.0
<PackageReference Include="gdUnit4.api" Version="5.0.0" />
<PackageVersion Include="gdUnit4.api" Version="5.0.0" />
<PackageReference Include="gdUnit4.api" />
paket add gdUnit4.api --version 5.0.0
#r "nuget: gdUnit4.api, 5.0.0"
#:package gdUnit4.api@5.0.0
#addin nuget:?package=gdUnit4.api&version=5.0.0
#tool nuget:?package=gdUnit4.api&version=5.0.0
The C# GdUnit4 API
What is GdUnit4.Api
gdUnit4.api is the C# package to enable GdUnit4 to run/write unit tests in C#.
Features
- Writing And Executing Tests in C# for Net8.0 and Net9.0 C#12
- Convenient interface for running test-suites directly from Godot<br> One of the main features of GdUnit4 is the ability to run test-suites directly from the Godot editor using the context menu. You can run test-suites from the FileSystem panel, the ScriptEditor, or the GdUnit Inspector. To do this, simply right-click on the desired test-suite or test-case and select "Run Test(s)" from the context menu. This will run the selected tests and display the results in the GdUnit Inspector.<br> You can create new test cases directly from the ScriptEditor by right-clicking on the function you want to test and selecting "Create TestCase" from the context menu.
- Fluent Syntax for writing test cases that's easy to read and understand
- Wide range of Assertions for verifying the behavior and output of your code
- Test Fuzzing support: for generating random inputs to test edge cases and boundary conditions
- Parameterized Tests: (Test Cases) for testing functions with multiple sets of inputs and expected outputs
- Dynamic Tests Data: 'DataPoint' attribute to define test data sets
- Scene runner: for simulating different kinds of inputs and actions, such as mouse clicks and keyboard inputs<br> For example, you can simulate mouse clicks and keyboard inputs by calling the appropriate methods on the runner instance. Additionally, you can wait for a specific signal to be emitted by the scene, or you can wait for a specific function to return a certain value.
- Integration with Test Adapter: Works seamlessly with the gdUnit4.test.adapter for running tests in Visual Studio, VS Code, and JetBrains Rider
Installation
You can install the GdUnit4 API by adding it as a package reference to your project:
<PackageReference Include="gdUnit4.api" Version="5.0.0"/>
Related Packages
- gdUnit4.test.adapter - Run your tests in Visual Studio, VS Code, and JetBrains Rider
- gdUnit4.analyzers - Add compile-time validation for your test code
Short Example
namespace GdUnit4.Tests
{
using static Assertions;
[TestSuite]
public class StringAssertTest
{
[TestCase]
public void IsEqual()
{
AssertThat("This is a test message").IsEqual("This is a test message");
}
[TestCase]
[RequireGodotRuntime] // ← Add this for Godot-dependent tests
public void IsEqual()
{
AssertThat(new Node2D()).IsNotNull();
}
[Test]
[RequireGodotRuntime]
[GodotExceptionMonitor] // ← Monitor Godot exceptions
public void TestNodeCallback()
{
var node = new MyNode(); // Will catch exceptions in _Ready()
AddChild(node);
}
[Test]
[DataPoint(nameof(TestData))] // ← Data-driven tests
public void TestCalculations(int a, int b, int expected)
{
AssertThat(Calculator.Add(a, b)).IsEqual(expected);
}
[Test]
[ThrowsException(typeof(ArgumentNullException), "Value cannot be null")]
public void TestValidation()
{
Calculator.Add(null, 5); // Expects specific exception
}
// Data source for parameterized tests
public static IEnumerable<object[]> TestData => new[]
{
new object[] { 1, 2, 3 },
new object[] { 5, 7, 12 }
};
}
}
Documentation
For more information, check out the complete API documentation.
You are welcome to
Thank you for supporting my project
License
This project is licensed under the MIT License - see the LICENSE file for details.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- CommandLineParser (>= 2.9.1)
- GodotSharp (>= 4.4.0)
- Microsoft.CodeAnalysis (>= 4.14.0)
- Microsoft.CodeAnalysis.CSharp (>= 4.14.0)
- Microsoft.CodeAnalysis.CSharp.Workspaces (>= 4.14.0)
- Mono.Cecil (>= 0.11.6)
- Moq (>= 4.20.72)
- Newtonsoft.Json (>= 13.0.3)
-
net9.0
- CommandLineParser (>= 2.9.1)
- GodotSharp (>= 4.4.0)
- Microsoft.CodeAnalysis (>= 4.14.0)
- Microsoft.CodeAnalysis.CSharp (>= 4.14.0)
- Microsoft.CodeAnalysis.CSharp.Workspaces (>= 4.14.0)
- Mono.Cecil (>= 0.11.6)
- Moq (>= 4.20.72)
- Newtonsoft.Json (>= 13.0.3)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on gdUnit4.api:
Package | Downloads |
---|---|
gdUnit4.test.adapter
GdUnit4 Test Adapter is the test adapter to run GdUnit4 tests in C#. |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on gdUnit4.api:
Repository | Stars |
---|---|
Revolutionary-Games/Thrive
The main repository for the development of the evolution game Thrive.
|
v5.0.0
## Major Architecture Overhaul
**BREAKING CHANGES:**
* Test Engine Redesign: Complete rework of the test engine that no longer requires Godot runtime by default
* Migration Required: Tests using Godot features (scenes, nodes, resources) must now be marked with `[RequireGodotRuntime]` attribute
* Significant performance improvements for logic-only tests (up to 10x faster)
✨ New Features
GD-138: Add capture test case execution stdout to the test report by @MikeSchulze in #139
GD-144: Add AwaitInputProcessed to SceneRunner by @MikeSchulze in #145
GD-46: Added support of DataPoint attributes, which make it possible to define parameterized tests with dynamic test data by @MikeSchulze in #147
GD-153: Add Roslyn Analyzer to validate TestCase and DataPoint attribute combinations by @MikeSchulze in #154
GD-156: Add an exception hook to report exceptions as test failures that are caught by Godot by @MikeSchulze in #157
GD-160: Apply runsettings environment variables to the test execution context by @MikeSchulze in #161
GD-163: Collect the Godot log file into test report by @MikeSchulze in #164
GD-156: Install Godot exception handler and forward uncaught exceptions as test failure. by @MikeSchulze in #162
GD-682: Rework on GdUnit4Net API Godot bridge by @MikeSchulze in #197
GD-27: Add VSTest filter support with test categories and traits by @MikeSchulze in #201
GD-240: Add GDUNIT4NET_API_V5 Conditional Compilation Constant by @MikeSchulze in #241
Upgrade to .NET 8/9 with C# 12 support by @MikeSchulze in #267
GD-211: Implement missing AwaitSignalOn by @MikeSchulze in #282
🪲 Bug Fixes
GD-149: Add error to the execution log when the test session timeout occurs by @MikeSchulze in #150
GD-152: Fix test case display name for dynamic test data driven tests by @MikeSchulze in #176
Fixes Godot exception monitoring issues by @MikeSchulze in #187
Make WithTimeout public by @MikeSchulze in #189
GD-199: TestRunner install ends with abnormal exit on large projects by @MikeSchulze in #200
GD-203: Handle failure reporting for test stages [Before] and [After] by @MikeSchulze in #204
GD-212: Fix vector assertion IsEqualApprox by @MikeSchulze in #214
GD-284: Fix test failure causes the entire test execution if it is executed in the Godot Editor by @MikeSchulze in #285
🧹 Maintenance
GD-140: GdUnit4 API: code cleanup and formatting by @MikeSchulze in https://github.com/MikeSchulze/gdUni...
## 📋 Migration Guide:
**Before v5.0.0:**
```csharp
[Test]
public void MyTest()
{
// All tests ran in Godot runtime
var node = new Node();
AddChild(node);
}
```
**v5.0.0:**
```csharp
[Test]
public void MyLogicTest()
{
// Runs fast without Godot runtime
var result = Calculator.Add(1, 2);
AssertThat(result).IsEqual(3);
}
[Test]
[RequireGodotRuntime] // Required for Godot-dependent tests
public void MyGodotTest()
{
var node = new Node();
AddChild(node);
}
[Test]
[DataPoint(nameof(TestData))] // Data-driven tests
public void TestCalculations(int a, int b, int expected)
{
AssertThat(Calculator.Add(a, b)).IsEqual(expected);
}
[Test]
[ThrowsException(typeof(ArgumentNullException), "Value cannot be null")]
public void TestValidation()
{
Calculator.Add(null, 5); // Expects specific exception
}
public static IEnumerable<object[]> TestData => new[]
{
new object[] { 1, 2, 3 },
new object[] { 5, 7, 12 }
};
```
## ⚙️ Configuration:
New `.runsettings` options:
```xml
<RunSettings>
<GdUnit4>
<CaptureStdOut>true</CaptureStdOut>
<Parameters>--verbose --headless</Parameters>
<DisplayName>FullyQualifiedName</DisplayName>
<CompileProcessTimeout>30000</CompileProcessTimeout>
</GdUnit4>
</RunSett>
```
This release represents a major evolution in GdUnit4's architecture, providing developers with the flexibility to write fast, efficient tests while maintaining full Godot integration capabilities when required.
-------------------------------------------------------------------------------------------------------
v4.3.1
Bug Fixes:
* GD-135: Cannot test signals on non-node classes
-------------------------------------------------------------------------------------------------------
v4.3.0
Improvements:
* GD-127: Replace stdout based TestEventProcessor by IPC implementation
* GD-124: Use LaunchProcessWithDebuggerAttached instead of AttachDebuggerIfNeed for Rider 2024.2
-------------------------------------------------------------------------------------------------------
v4.2.5
Bug Fixes:
* GD-110: Allow a Node to be passed in to SceneRunner.Load as the root of the scene.
* GD-121: Improve AssertSignal by adding a StartMonitoring method
-------------------------------------------------------------------------------------------------------
V4.2.4
Improvements:
* GD-89: Add input action support to the `SceneRunner` by @MikeSchulze in https://github.com/MikeSchulze/gdUnit4Net/pull/92
- Added input action handling to the SceneRunner
- `SimulateActionPressed(string action)`
- `SimulateActionPress(string action)`
- `SimulateActionRelease(string action)`
* GD-94: Improve assertions error message when comparing objects by @MikeSchulze in https://github.com/MikeSchulze/gdUnit4Net/pull/95
* GD-99: Add support to load a scene by `uid://` path to the Scene Runner by @MikeSchulze in https://github.com/MikeSchulze/gdUnit4Net/pull/100
Bug Fixes:
* GD-90: Cleanup old runner configuration before run new tests by @MikeSchulze in https://github.com/MikeSchulze/gdUnit4Net/pull/93
* GD-96: Fix methods with a single parameterized test case are not executed by @MikeSchulze in https://github.com/MikeSchulze/gdUnit4Net/pull/97
* GD-101: Respect the GdUnit4 settings to notify about orphan nodes by @MikeSchulze in https://github.com/MikeSchulze/gdUnit4Net/pull/102
* GD-103: Trim MSTest assert stack trace by @MikeSchulze in https://github.com/MikeSchulze/gdUnit4Net/pull/105
* GD-104: Fix exception failure message propagation by @MikeSchulze in https://github.com/MikeSchulze/gdUnit4Net/pull/108
-------------------------------------------------------------------------------------------------------
v4.2.3
Bug Fixes:
- Fix `AssertThat` for dynamic assert type resolving
-------------------------------------------------------------------------------------------------------
v4.2.2
What's Changed:
- Rename repository from `gdUnit4Mono` to `gdUnit4Net`
- Update project to GodotSharp v4.1.0
- Format and fix warnings according to C# standards
- Format the tests according to the C# Formatting rules
- Format the code to C# standard
- Support both net7 and net8 at once
- Add full .NET8 support
- Provide generic vector assert to support all Godot vector types
- Revision of the stack trace collection for failed tests
- Complete missing features for `IDictionaryAssert`
- Complete missing features for `IEnumerableAssert`
- Complete missing features for `INumberAssert`
- Add missing `SimulateMouseMoveRelative` and `SimulateMouseMoveAbsolute` to `ISceneRunner`
Bug Fixes:
- SceneRunner: Fix InputEvent handling
- Calling Invoke on `SceneRunner` must propagate exceptions
- Fix GdUnit4MonoAPI `IsTestSuite` cannot run TestSuite
- Fix test run stops at some point
- Parameterized test cases are not run from Godot Editor GdUnit4 inspector
-------------------------------------------------------------------------------------------------------
v4.2.0
- gdUnit4 API initial version.