.NET Minimalist Property Based Testing Framework
PM> Install-Package NetChecker -Version 1.0.0.1
Using NetChecker we can write tests on the following way
namespace tests
{
public class MyTest
{
private T id<T>(T x) => x;
private int pow(int x) => x * x;
private string concat(string a, string b) => a + b;
[Fact]
public void Identity()
{
(new IntProducer())
.ChooseFrom()
.ForAll(x => id(x) == x)
.Should()
.BeTrue();
}
[Fact]
public void SomeSquares()
{
Gen<int>
.FromEnumerable(Enumerable.Range(1, 100))
.Any(x => pow(x) == x)
.Should()
.BeTrue();
}
[Fact]
public void Concat()
{
var stringProducer = new StringProducer();
var producer = new TupleProducer<string, string>(stringProducer, stringProducer);
producer
.ChooseFrom()
.ForAll(t => concat(t.Item1, t.Item2).StartsWith(t.Item1) && concat(t.Item1, t.Item2).EndsWith(t.Item2))
.Should()
.BeTrue();
}
}
}Please notice that each test or assertion of the form x => pow(x) == x is executed 100 times by default. The method ChooseFrom is the one generating the sample data to be used on the test. By using ForAll and ForAny we can do different kind of assertions. Should().BeTrue() are just part of xUnit framework and you could be just doing simple assertions of the form:
var result = Gen<int>
.FromEnumerable(Enumerable.Range(1, 100))
.Any(x => pow(x) == x)
assert (result == true);