Skip to content

strongly type Theory data with Theory

using UnitTestSample;
using Xunit;

namespace Test
{
    public class CalculatorTest
    {
        [Theory]
        [ClassData(typeof(CalculatorTestData2))]
        public void Add2(Point point, double expected)
        {
            var result = Calculator.Add(point.X, point.Y);
            Assert.True(expected == result, "Shit Happens");
        }
    }

    public class CalculatorTestData2 : TheoryData<Point, double>
    {
        public CalculatorTestData2()
        {
            Add(new Point(1.5, 2.5), 4);
            Add(new Point(-4, -6), -10);
        }
    }

    public class Point
    {
        public Point(double x, double y)
        {
            X = x;
            Y = y;
        }

        public double X { get; }
        public double Y { get; }
    }
}

Using MemberData

using Xunit;

namespace Test
{

    public class Point
    {
        public Point(int x, int y)
        {
            X = x;
            Y = y;
        }

        public int X { get; set; }
        public int Y { get; set; }

        public override string ToString() => X + "," + Y;
    }
}
using Xunit;

namespace Test
{
    public static class PointData
    {
        public static TheoryData<Point, string> DataToString
        {
            get
            {
                var data = new TheoryData<Point, string>();
                data.Add(new Point(0, 0), "0,0");
                data.Add(new Point(10, 0), "10,0");
                data.Add(new Point(10, 10), "10,10");
                data.Add(new Point(0, 10), "0,10");
                data.Add(new Point(5, 10), "5,10");
                return data;
            }
        }
        public static TheoryData<Point, string> DataToString2
        {
            get
            {
                var data = new TheoryData<Point, string>();
                data.Add(new Point(0, 0), "0,0");
                data.Add(new Point(10, 0), "10,0");
                data.Add(new Point(10, 10), "10,10");
                data.Add(new Point(0, 10), "0,10");
                data.Add(new Point(5, 10), "5,10");
                return data;
            }
        }
    }
}
using Xunit;

namespace Test
{
    public class PointTest
    {
        [Theory]
        [MemberData(nameof(PointData.DataToString), MemberType = typeof(PointData))]
        public void Point_ToString(Point point, string expected)
        {
            var actual = point.ToString();
            Assert.Equal(expected, actual);
        }
        [Theory]
        [MemberData(nameof(PointData.DataToString2), MemberType = typeof(PointData))]
        public void Point_ToString2(Point point, string expected)
        {
            var actual = point.ToString();
            Assert.Equal(expected, actual);
        }
    }
}