Back to Orleans

Microsoft Orleans Serialization Test Kit

src/Orleans.Serialization.TestKit/README.md

10.1.04.0 KB
Original Source

Microsoft Orleans Serialization Test Kit

Introduction

Microsoft Orleans Serialization Test Kit provides tools and utilities to help test serialization functionality in Orleans applications. This package simplifies writing tests that verify serialization and deserialization of your custom types work correctly.

Getting Started

To use this package, install it via NuGet:

shell
dotnet add package Microsoft.Orleans.Serialization.TestKit

You'll typically add this package to a test project.

Example - Testing Serialization

csharp
using Orleans.Serialization.TestKit;
using Xunit.Abstractions;

public class TimeSpanTests(ITestOutputHelper output) : FieldCodecTester<TimeSpan>(output)
{
    protected override TimeSpan CreateValue() => TimeSpan.FromMilliseconds(Guid.NewGuid().GetHashCode());
    protected override TimeSpan[] TestValues => [TimeSpan.MinValue, TimeSpan.MaxValue, TimeSpan.Zero, TimeSpan.FromSeconds(12345)];
    protected override Action<Action<TimeSpan>> ValueProvider => Gen.TimeSpan.ToValueProvider();
}

public class TimeSpanCopierTests(ITestOutputHelper output) : CopierTester<TimeSpan, IDeepCopier<TimeSpan>>(output)
{
    protected override TimeSpan CreateValue() => TimeSpan.FromMilliseconds(Guid.NewGuid().GetHashCode());
    protected override TimeSpan[] TestValues => [TimeSpan.MinValue, TimeSpan.MaxValue, TimeSpan.Zero, TimeSpan.FromSeconds(12345)];
    protected override Action<Action<TimeSpan>> ValueProvider => Gen.TimeSpan.ToValueProvider();
}

public class DateTimeOffsetTests(ITestOutputHelper output) : FieldCodecTester<DateTimeOffset, DateTimeOffsetCodec>(output)
{
    protected override DateTimeOffset CreateValue() => DateTime.UtcNow;
    protected override DateTimeOffset[] TestValues =>
    [
        DateTimeOffset.MinValue,
        DateTimeOffset.MaxValue,
        new DateTimeOffset(new DateTime(1970, 1, 1, 0, 0, 0), TimeSpan.FromHours(11.5)),
        new DateTimeOffset(new DateTime(1970, 1, 1, 0, 0, 0), TimeSpan.FromHours(-11.5)),
    ];

    protected override Action<Action<DateTimeOffset>> ValueProvider => Gen.DateTimeOffset.ToValueProvider();
}

public class DateTimeOffsetCopierTests(ITestOutputHelper output) : CopierTester<DateTimeOffset, IDeepCopier<DateTimeOffset>>(output)
{
    protected override DateTimeOffset CreateValue() => DateTime.UtcNow;
    protected override DateTimeOffset[] TestValues =>
    [
        DateTimeOffset.MinValue,
        DateTimeOffset.MaxValue,
        new DateTimeOffset(new DateTime(1970, 1, 1, 0, 0, 0), TimeSpan.FromHours(11.5)),
        new DateTimeOffset(new DateTime(1970, 1, 1, 0, 0, 0), TimeSpan.FromHours(-11.5)),
    ];

    protected override Action<Action<DateTimeOffset>> ValueProvider => Gen.DateTimeOffset.ToValueProvider();
}

Additional Testing Features

The TestKit provides several utilities for testing serialization and allows you to focus on testing specific serialization components:

csharp
// Using a specific serializer
var specificSerializer = services.GetRequiredService<Serializer<MyCustomType>>();
byte[] bytes = specificSerializer.SerializeToArray(original);
var deserialized = specificSerializer.Deserialize(bytes);

Documentation

For more comprehensive documentation, please refer to:

Feedback & Contributing