OnRender User Method Unit Testing

I have a user control MyControlthat inherits from Canvasand which has its own logic inside OnRender-Method. He should draw some rectangles and text in the context of the drawing.

public class MyControl : Canvas
{
    protected override void OnRender(DrawingContext dc)
    {
        // do something like dc.DrawRectangle(...);
        // do something like dc.DrawText(...);
    }
}

Since I need to develop a test method, I want unit test OnRender-Method. I tried several solutions that did not work. They all required an inherited class for testing purposes, which I will name TestingMyControland which provides OnRender-Method in the following form:

public class TestingMyControl : MyControl
{
    public void Render(DrawingContext dc)
    {
        base.OnRender(dc);
    }
}
  • DrawingContext , , , DrawingContext. , , . : DrawingContext , .

  • DrawingContext , , Mock . : , Rhino-Mocks -, .

, , OnRender-Method, DrawingContext...

+3
1

, DrawingContext DrawingGroup.

public class TestingMyControl : MyControl
{
    public DrawingGroup Render()
    {
        var drawingGroup = new DrawingGroup();
        using (var drawingContext = drawingGroup.Open())
        {
             base.OnRender(drawingContext);
        }

        return drawingGroup;
    }
}

, :

    [Test]
    public void Should_render()
    {
        var controlToTest = new TestingMyControl();

        var drawingGroup = controlToTest.Render();

        var drawing = drawingGroup.Children[0] as GeometryDrawing;
        Assert.That(drawing.Brush, Is.EqualTo(Brushes.Black));
        Assert.That(drawing.Pen.Brush, Is.EqualTo(Brushes.SeaGreen));
        Assert.That(drawing.Pen.Thickness, Is.EqualTo(0.6));
        Assert.That(drawing.Bounds.X, Is.EqualTo(5));
        Assert.That(drawing.Bounds.Y, Is.EqualTo(15));
        Assert.That(drawing.Bounds.Width, Is.EqualTo(25));
        Assert.That(drawing.Bounds.Height, Is.EqualTo(35));
    }

:

public class MyControl : Canvas
{
    protected override void OnRender(DrawingContext dc)
    {
        dc.DrawRectangle(Brushes.Black, new Pen(Brushes.SeaGreen, 0.6), new Rect(5, 15, 25, 35));
    }
}
+5

Source: https://habr.com/ru/post/1535546/


All Articles