【发布时间】:2015-04-14 08:49:33
【问题描述】:
我有一个自定义控件MyControl,它继承自Canvas,并且在OnRender-方法中有自己的逻辑。
它应该在绘图上下文中绘制一些矩形和文本。
public class MyControl : Canvas
{
protected override void OnRender(DrawingContext dc)
{
// do something like dc.DrawRectangle(...);
// do something like dc.DrawText(...);
}
}
由于我必须开发测试驱动,我想对OnRender-Method 进行单元测试。
我尝试了几种不起作用的解决方案。所有这些都需要一个继承类来进行测试,我将其称为TestingMyControl,并以以下形式公开OnRender-Method:
public class TestingMyControl : MyControl
{
public void Render(DrawingContext dc)
{
base.OnRender(dc);
}
}
由于
DrawingContext是一个抽象类,我想我可以实现一个实现DrawingContext的测试类。然后我可以收集它应该绘制的所有矩形和文本,并对此做出断言。 问题:DrawingContext有一个内部构造函数,所以我不能继承它。由于
DrawingContext是一个抽象类,我想我可以为它创建一个Mock。 问题:它有一些内部抽象方法,因此 Rhino-Mocks 无法创建代理,因为它无法实现这些内部抽象方法。
所以我有一个问题,我无法测试 OnRender 方法,因为我无法创建 DrawingContext 的实例...
【问题讨论】: