Development
#ai
nunit-skill
Generates NUnit 3 tests in C#. Covers Assert.That constraint model, parameterized tests, setup/teardown, and Moq mocking. Use when user mentions "NUnit", "[TestFixture]", "[Test]", "Assert.That", "C# unit test". Triggers on: "NUnit", "[Test]", "Assert.That", "C# test", "NUnit3".
DeepseekModel
Curated skill
Quality Excellent · 78
v1.0.0
Get
https://deepseekmodel.com/api/download.php?id=lambdatest-agent-skills-nunit-skill-skill-md&format=skill
Download .skill
Standard format with system_prompt and model_config, ready for any agent framework
The actual content of the system_prompt field in the .skill file.
name nunit-skill description Generates NUnit 3 tests in C#. Covers Assert.That constraint model, parameterized tests, setup/teardown, and Moq mocking. Use when user mentions "NUnit", "[TestFixture]", "[Test]", "Assert.That", "C# unit test". Triggers on: "NUnit", "[Test]", "Assert.That", "C# test", "NUnit3". languages ["C#"] category unit-testing license MIT metadata {"author":"TestMu AI","version":"1.0"} NUnit 3 Testing Skill Core Patterns Basic Test using NUnit.Framework; [ TestFixture ] public class CalculatorTests { private Calculator _calculator; [ SetUp ] public void SetUp () => _calculator = new Calculator(); [ Test ] public void Add_TwoPositiveNumbers_ReturnsSum () { Assert.That(_calculator.Add( 2 , 3 ), Is.EqualTo( 5 )); } [ Test ] public void Divide_ByZero_ThrowsException () { Assert.Throws<DivideByZeroException>(() => _calculator.Divide( 10 , 0 )); } [ TearDown ] public void TearDown () { /* cleanup */ } } Constraint Model (Assert.That) Assert.That(actual, Is.EqualTo(expected)); Assert.That(actual, Is.Not.EqualTo(unexpected)); Assert.That( value , Is.GreaterThan( 5 )); Assert.That( value , Is.InRange( 1 , 10 )); Assert.That(str, Does.Contain( "hello" )); Assert.That(str, Does.StartWith( "He" ).IgnoreCase); Assert.That(collection, Has.Count.EqualTo( 3 )); Assert.That(collection, Has.Member( "item" )); Assert.That(collection, Is.All.GreaterThan( 0 )); Assert.That(obj, Is.Null); Assert.That(obj, Is.Not.Null); Assert.That(obj, Is.InstanceOf<MyClass>()); Assert.That(actual, Is.EqualTo( 3.14 ).Within( 0.01 )); Assert.That(() => Method(), Throws.TypeOf<ArgumentException>() .With.Message.Contains( "invalid" )); Parameterized Tests [ TestCase(2, 3, 5) ] [ TestCase(-1, 1, 0) ] [ TestCase(0, 0, 0) ] public void Add_ReturnsCorrectSum ( int a, int b, int expected ) { Assert.That(_calculator.Add(a, b), Is.EqualTo(expected)); } [ TestCaseSource(nameof(DivisionCases)) ] public void Divide_ReturnsCorrectQuotient ( int a, int b, double expected ) { Assert.That(_calculator.Divide(a, b), Is.EqualTo(expected).Within( 0.01 )); } private static IEnumerable<TestCaseData> DivisionCases () { yield return new TestCaseData ( 10 , 2 , 5.0 ). SetName ( "10/2=5" ) ; yield return new TestCaseData ( 7 , 3 , 2.33 ). SetName ( "7/3=2.33" ) ; } Mocking with Moq using Moq; [ TestFixture ] public class UserServiceTests { private Mock<IUserRepository> _mockRepo; private Mock<IEmailService> _mockEmail; private UserService _service; [ SetUp ] public void SetUp () { _mockRepo = new Mock<IUserRepository>(); _mockEmail = new Mock<IEmailService>(); _service = new UserService(_mockRepo.Object, _mockEmail.Object); } [ Test ] public void CreateUser_SavesAndSendsEmail () { _mockRepo.Setup(r => r.Save(It.IsAny<User>())).Returns( new User { Id = 1 }); var result = _service.CreateUser( "alice@test.com" , "Alice" ); Assert.That(result.Id, Is.EqualTo( 1 )); _mockRepo.Verify(r => r.Save(It.IsAny<User>()), Times.Once); _mockEmail.Verify(e => e.SendWelcome( "alice@test.com" ), Times.Once); } } Lifecycle [OneTimeSetUp] → Before all tests in fixture [SetUp] → Before each test [Test] → Test method [TearDown] → After each test [OneTimeTearDown] → After all tests in fixture Categories and Attributes [ Test, Category( "Smoke" ) ] public void QuickTest () { } [ Test, Ignore( "Bug #123" ) ] public void SkippedTest () { } [ Test, Timeout(5000) ] public void TimeLimitedTest () { } [ Test, Retry(3) ] public void FlakyTest () { } Anti-Patterns Bad Good Why Assert.AreEqual(a, b) (classic) Assert.That(a, Is.EqualTo(b)) Constraint model is richer No [SetUp] Proper lifecycle Resource management Testing private methods Test public API Encapsulation No categories [Category("Smoke")] Run subsets Setup: dotnet add package NUnit NUnit3TestAdapter Microsoft.NET.Test.Sdk Run: dotnet test or dotnet test --filter TestCategory=Smoke Deep Patterns For advanced patterns, debugging guides, CI/CD integration, and best practices, see reference/playbook.md .
Keywords that activate this skill. Click one to copy it.
This skill does not provide trigger words.
The downloaded .skill package contains the following fields.
| Field | Description |
|---|---|
| format | Format tag (skill/v1) |
| skill_id | Unique skill ID |
| name | Skill name |
| version | Version |
| description | Description |
| category | Categories (array) |
| trigger_words | Trigger words |
| tags | Tags |
| source | Source |
| source_url | Source URL (this page) |
| exported_at | Exported at (set per download) |
| system_prompt | System prompt body |
| model_config | Model config: provider / model / temperature / max_tokens / top_p |
| examples | Examples |
| install_guide | Import guide for Coze / Dify / Claude / custom frameworks |
The same skill can be exported in different platform formats.