Skip to content

Instantly share code, notes, and snippets.

View aivascu's full-sized avatar

Andrei Ivascu aivascu

View GitHub Profile
@aivascu
aivascu / OmitInitOnlyRecordProperties.cs
Last active February 1, 2024 16:17
Omit constructor initialized, ini-only record properties
public class OmitInitOnlyRecordProperties : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customizations.Insert(0, new Omitter(new ExtenalInitPropertySpecification()));
}
private class ExtenalInitPropertySpecification : IRequestSpecification
{
public bool IsSatisfiedBy(object request)
@aivascu
aivascu / RandomRelayCustomization.cs
Created March 24, 2022 19:08
Random relay customization
public class RandomRelayCustomization : ISpecimenBuilder
{
private readonly List<ISpecimenBuilder> builders;
private readonly IEnumerator<int> randomizer;
public RandomRelayCustomization(params ISpecimenBuilder[] builders)
: this(builders.AsEnumerable())
{
}
@aivascu
aivascu / FreezingBehavior.cs
Last active January 31, 2022 13:02
AutoFixture Freezing behavior
internal class FreezingBehavior : ISpecimenBuilderTransformation
{
public FreezingBehavior(IRequestSpecification specification)
{
this.specification = specification ?? throw new ArgumentNullException(nameof(specification));
}
public ISpecimenBuilderNode Transform(ISpecimenBuilder builder)
{
return new FreezingNode(builder, specification);
@aivascu
aivascu / ConfigurableMockPostprocessor.cs
Last active December 16, 2021 21:22
Custom Mock postprocessor
public class ConfigurableMockPostprocessor : ISpecimenBuilder
{
public ConfigurableMockPostprocessor(ISpecimenBuilder builder)
{
this.Builder = builder ?? throw new ArgumentNullException(nameof(builder));
}
public ISpecimenBuilder Builder { get; set; }
public object Create(object request, ISpecimenContext context)
@aivascu
aivascu / AutoFixtureParameterCustomization.cs
Last active November 18, 2021 09:34
Demonstrates the use of parameter customization attributes
using AutoFixture.Dsl;
using AutoFixture.Kernel;
using AutoFixture.Xunit2;
using System;
using System.Reflection;
using Xunit;
namespace AutoFixture.Issue1302
{
public class ParameterDecoratorTests
@aivascu
aivascu / Infrastructure.cs
Created November 15, 2021 17:49
Manual property customization
public class ExactPropertyCriterion : IEquatable<PropertyInfo>
{
private readonly PropertyInfo propertyInfo;
public ExactPropertyCriterion(PropertyInfo propertyInfo)
{
this.propertyInfo = propertyInfo;
}
public bool Equals(PropertyInfo other)
@aivascu
aivascu / Order.cs
Created November 15, 2021 12:22
AutoFixture partial postprocess composition
public class Order
{
public decimal TaxPercent { get; set; }
public decimal DiscountPercent { get; set; }
}
public class ChristmasOrderTax : IPartialPostprocessComposer<Order>
{
public IPostprocessComposer<Order> Compose(IPostprocessComposer<Order> composer)
{
@aivascu
aivascu / CombinatorialNames.cs
Created June 16, 2021 23:25
Combinatorial names generator
public class CombinatorialNames : IEnumerable<FullName>
{
private readonly IEnumerable<FullName> names;
public CombinatorialNames(IEnumerable<string> firstNames, IEnumerable<string> lastNames)
{
names =
from firstName in firstNames
from lastName in lastNames
select new FullName(firstName, lastName);
@aivascu
aivascu / IDepthHandler.cs
Created May 31, 2021 18:44
AutoFixture depth guard
using System.Collections.Generic;
namespace AutoFixture
{
public interface IDepthHandler
{
object Handle(object request, Stack<object> recordedRequests);
}
}
@aivascu
aivascu / RandomFromFixedSequence.cs
Created May 19, 2021 22:33
RandomFromFixedSequence example
public class RandomFromFixedSequence<T> : ICustomization
{
private IEnumerator<int> randomizer;
private List<T> sequence;
public void Customize(IFixture fixture)
{
this.sequence = fixture.CreateMany<T>().ToList();
this.randomizer = new RoundRobinSequence(0, sequence.Count - 1).GetEnumerator();
fixture.Register(PickRandomItemFromSequence);