ByteDev.Testing 5.1.0

dotnet add package ByteDev.Testing --version 5.1.0                
NuGet\Install-Package ByteDev.Testing -Version 5.1.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ByteDev.Testing" Version="5.1.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ByteDev.Testing --version 5.1.0                
#r "nuget: ByteDev.Testing, 5.1.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ByteDev.Testing as a Cake Addin
#addin nuget:?package=ByteDev.Testing&version=5.1.0

// Install ByteDev.Testing as a Cake Tool
#tool nuget:?package=ByteDev.Testing&version=5.1.0                

ByteDev.Testing

.NET Standard library that provides some testing related functionality.

Installation

ByteDev.Testing has been written as a .NET Standard 2.1 library.

ByteDev.Testing is hosted as a package on nuget.org. To install from the Package Manager Console in Visual Studio run:

Install-Package ByteDev.Testing

Further details can be found on the nuget page.

Release Notes

Releases follow semantic versioning.

Full details of the release notes can be viewed on GitHub.

Usage

The library is split into the following main parts:

  • Builders
  • HTTP
  • Setting
  • Settings

Builders - DirectoryBuilder

DirectoryBuilder helps to create directories quickly for testing purposes.

using ByteDev.Testing.Builders;

// ...

// Create a directory quickly on disk
DirectoryInfo dir = DirectoryBuilder.InFileSystem
                        .WithPath(@"C:\Temp\Testing")
                        .EmptyIfExists()
                        .Build();

Builders - FileBuilder

FileBuilder helps to create files quickly for testing purposes.

using ByteDev.Testing.Builders;

// ...

// Create a file quickly on disk
FileInfo file = FileBuilder.InFileSystem
                    .WithPath(@"C:\Temp\Testing\TestFile1.txt")
                    .WithSize(10)
                    .OverwriteIfExists(true)
                    .Build();

HTTP - FakeHttpMessageHandler

FakeHttpMessageHandler allows you to provide a sequence of outcomes (HTTP responses or exceptions thrown) that correspond to each HTTP request made.

using ByteDev.Testing.Http;

// ...

var uri = new Uri("http://www.google.com/");

// Create a sequence of outcomes...
// 1st request will return a response OK with content.
// 2nd request will throw request timeout exception.
var outcomes = new List<FakeRequestOutcome>
{
    new FakeRequestOutcome(new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new StringContent("Testing")
    }),
    new FakeRequestOutcome(FakeRequestOutcome.CreateRequestTimeout())
}

// Create a fake HTTP handler
var handler = new FakeHttpMessageHandler(outcomes);

var httpClient = new HttpClient(handler);

var response1 = await httpClient.GetAsync(uri);
var content = await response1.Content.ReadAsStringAsync();

// response1.StatusCode == HttpStatusCode.OK
// content == "Testing"

// Throws TaskCanceledException("Request has timed out.")
var response2 = await httpClient.GetAsync(uri);

// handler.RequestsMade == 2

Setting - TestSetting

The TestSetting type represents a single string value setting that lives external to a test project.

using ByteDev.Testing.Setting;
using ByteDev.Testing.Setting.Providers;

// ...

var testSetting = new TestSetting();

testSetting.AddProvider(new FileSettingProvider(new[]
{
    "C:\Dev\SomeSetting.apikey",
    "C:\Temp\AnotherSetting.txt"
}));

testSetting.AddProvider(new EnvironmentSettingProvider("MyProjEnvVar"));

string setting = testSetting.GetSetting();

// The two files will be checked first for the setting and if 
// not found the environment variable will be checked.

Settings - TestSettings

The TestSettings type represents sets of test settings that lives external to a test project.

// Define the settings class

public class MyAppSettings
{
    public string MySecret1 { get; set; }

    public string MySecret2 { get; set; }
}

Example JSON settings file MyApp.settings.json (property name case is ignored):

{
  "MySecret1": "some secret 1",
  "MySecret2": "some secret 2"
}
using ByteDev.Azure.KeyVault.Secrets;
using ByteDev.Testing.Settings;
using ByteDev.Testing.Settings.Providers;

// ...

var kvClient = new KeyVaultSecretClient(keyVaultUri);

var testSettings = new TestSettings();

testSettings
    .AddProvider(new JsonFileSettingsProvider(
        @"X:\Secure\MyApp.settings.json",
        @"C:\Temp\MyOtherApp.settings.json))
    .AddProvider(new KeyVaultSettingsProvider(kvClient));

// The TestSettings type will try to get the settings from the two 
// JSON files first and if it fails will try Azure Key Vault

MyAppSettings settings = testSettings.GetSettings<MyAppSettings>();

As well as defining and providing your own settings class you can also use the built in TestAzureSettings and TestAzureKeyVaultSettings settings classes.

For example:

using ByteDev.Testing.Settings.Entities;

// ...

TestAzureSettings settings = testSettings.GetAzureSettings();

// TestAzureSettings contains common Azure settings, including:
// SubscriptionId, TenantId, ClientId, ClientSecret etc.
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  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. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
5.1.0 553 9/20/2022
5.0.2 428 7/6/2022
5.0.1 425 7/6/2022
5.0.0 411 6/29/2022
4.0.0 461 3/21/2022
3.1.0 364 8/11/2021
3.0.0 337 7/23/2021
2.0.1 343 6/29/2021
1.1.0 496 10/20/2020
1.0.0 437 9/24/2020