diff --git a/docs/input/cli/unit-testing.md b/docs/input/cli/unit-testing.md index 45e87ad9..d14ee529 100644 --- a/docs/input/cli/unit-testing.md +++ b/docs/input/cli/unit-testing.md @@ -1,17 +1,17 @@ Title: Unit Testing Order: 14 -Description: Instructions for unit testing a Spectre.Console application. +Description: Instructions for unit testing a Spectre.Console.Cli application. --- -`Spectre.Console` has a separate project that contains test harnesses for unit testing your own console applications. +`Spectre.Console.Cli` has a separate project that contains test harnesses for unit testing your own console applications. -The fastest way of getting started is to install the `Spectre.Console.Testing` NuGet package. +The fastest way of getting started is to install the `Spectre.Console.Cli.Testing` NuGet package. ```text -> dotnet add package Spectre.Console.Testing +> dotnet add package Spectre.Console.Cli.Testing --prerelease ``` -`Spectre.Console.Testing` is also the namespace containing the test classes. +`Spectre.Console.Cli.Testing` is also the namespace containing the test classes. ## Testing a CommandApp @@ -141,55 +141,4 @@ public sealed class InteractiveCommandTests result.Output.EndsWith("[Apple;Apricot;Spectre Console]"); } } -``` - -## Testing console behaviour - - `TestConsole` and `TestConsoleInput` are testable implementations of `IAnsiConsole` and `IAnsiConsoleInput`, allowing you fine-grain control over testing console output and interactivity. - -The following example renders some widgets before then validating the console output: - -```csharp - [TestMethod] - public void Should_Render_Panel() - { - // Given - var console = new TestConsole(); - - // When - console.Write(new Panel(new Text("Hello World"))); - - // Then - Assert.AreEqual(console.Output, """" -┌─────────────┐ -│ Hello World │ -└─────────────┘ - -""""); - } -``` - -While `Assert` is fine for validating simple output, more complex output may benefit from a tool like [Verify](https://github.com/VerifyTests/Verify). - -The following example prompts the user for input before then validating the expected choice was made: - -```csharp - [TestMethod] - public void Should_Select_Orange() - { - // Given - var console = new TestConsole(); - console.Input.PushTextWithEnter("Orange"); - - // When - console.Prompt( - new TextPrompt("Favorite fruit?") - .AddChoice("Banana") - .AddChoice("Orange")); - - // Then - Assert.AreEqual(console.Output, "Favorite fruit? [Banana/Orange]: Orange\n"); - } -``` - -`CommandAppTester` uses `TestConsole` internally, which in turn uses `TestConsoleInput`, offering a fully testable harness for `Spectre.Console` widgets, prompts and commands. \ No newline at end of file +``` \ No newline at end of file diff --git a/docs/input/unit-testing.md b/docs/input/unit-testing.md new file mode 100644 index 00000000..48b11792 --- /dev/null +++ b/docs/input/unit-testing.md @@ -0,0 +1,63 @@ +Title: Unit Testing +Order: 24 +Description: Instructions for unit testing a Spectre.Console application. +--- + +`Spectre.Console` has a separate project that contains test harnesses for unit testing your own console applications. + +The fastest way of getting started is to install the `Spectre.Console.Testing` NuGet package. + +```text +> dotnet add package Spectre.Console.Testing +``` + +`Spectre.Console.Testing` is also the namespace containing the test classes. + +## Testing console behaviour + + `TestConsole` and `TestConsoleInput` are testable implementations of `IAnsiConsole` and `IAnsiConsoleInput`, allowing you fine-grain control over testing console output and interactivity. + +The following example renders some widgets before then validating the console output: + +```csharp + [TestMethod] + public void Should_Render_Panel() + { + // Given + var console = new TestConsole(); + + // When + console.Write(new Panel(new Text("Hello World"))); + + // Then + Assert.AreEqual(console.Output, """" +┌─────────────┐ +│ Hello World │ +└─────────────┘ + +""""); + } +``` + +While `Assert` is fine for validating simple output, more complex output may benefit from a tool like [Verify](https://github.com/VerifyTests/Verify). + +The following example prompts the user for input before then validating the expected choice was made: + +```csharp + [TestMethod] + public void Should_Select_Orange() + { + // Given + var console = new TestConsole(); + console.Input.PushTextWithEnter("Orange"); + + // When + console.Prompt( + new TextPrompt("Favorite fruit?") + .AddChoice("Banana") + .AddChoice("Orange")); + + // Then + Assert.AreEqual(console.Output, "Favorite fruit? [Banana/Orange]: Orange\n"); + } +``` \ No newline at end of file