2012-03-12 50 views
3

TGUITestRunner形式表示DUNIT测试结果和GUITestRunner.RunTest程序创建一次:如何从DUnit测试中获得活动的TGUITestRunner?

procedure RunTest(test: ITest); 
begin 
    with TGUITestRunner.Create(nil) do 
    begin 
    try 
     Suite := test; 
     ShowModal; 
    finally 
     Free; 
    end; 
    end; 
end; 

我想它在运行时通过写有色状态消息延伸。这是可能的,因为GUI底部的状态消息被放入TRichEdit中。所以我需要在我的TTestCase中的某个地方获得指向这个表单的指针。

我可以在没有修复DUnit代码的情况下执行此操作吗?也许你可以推荐一些黑客?

+0

这将会严重抵制Xunit框架的谷物。测试用例和测试运行器是非常分离的,特别是测试用例是设计者对测试运行者一无所知。 – 2012-03-12 12:38:03

+0

@DavidHeffernan,我知道我必须创建自己的测试运行器并实现我需要的东西,但也许可以在不花费数小时来实现ITestListener的情况下进行此次小修补。 – Andrew 2012-03-12 12:46:01

+1

好吧,DUnit毕竟是开源..... – 2012-03-12 12:54:23

回答

1

A“脱钩”的方式来做到这一点可能是使用你的状态信息里面的一些“嵌入代码”:

Status('<blue>Testing'); 

从DUNIT测试框架内,你可以检查的状态初始字符消息是'<',并提取参数(如颜色或其他),然后修改dUnit来处理它。

这样,您的测试仍然可以在未修改的dUnit测试运行器上运行。几年后,您可能想要转到最新的dUnit测试,并且我不建议进行任何API更改,或尝试访问测试运行器对象。您可以在测试中看到的API和事情都是严格控制的。这是一个适当的面向对象设计的原则,jUnit/xUnit/dUnit的创建者非常相信。

+1

是的,我以自己的形式实现了'IStatusListener',并且可以通过在SetUp上调用'SetStatusListener(MyObjectToDisplayStatus)'将它和主测试GUI一起显示出来。不过,我想将它更深入地集成到GUI中,因为多个表单看起来很伤心。 – Andrew 2012-03-12 13:42:27