We use AutoFixture for test data generation, one of the scenarios requires us to provide fixed data, so we can test the method below.
public enum OrderState { Initial = 0, State1 = 1, State2 = 2, State3 = 3 };
public record Order(Guid Id, string Reference, OrderState State);
public static class Filter
{
public static IEnumerable<Order> ByState(IEnumerable<Order> orders, OrderState state)
{
return orders.Where(order => order.State == state);
}
}
Test
[Fact]
public void Returns_only_orders_with_initial_state()
{
// Arrange
var fixture = new Fixture();
var order1 = fixture.Build(o => o.State, OrderState.Initial).Create();
var allOrders = new[]
{
fixture.Build(o => o.State, OrderState.State1).Create(),
fixture.Build(o => o.State, OrderState.State2).Create(),
fixture.Build(o => o.State, OrderState.State3).Create(),
order1
};
// Act
var actual = new Filter().ByState(allOrders, OrderState.Initial);
// Assert
actual.Should().BeEquivalentTo(new[] { order1 });
}
Test fails because AutoFixture can not write to readonly properties - I understand that.
How can I create an instance with fixed value for the State
property, but still use "random" values for other properties?