在Python中进行Corba单元测试
我想听听你们对使用Corba与服务器通信的代码进行单元测试的看法。
你们会模拟Corba对象吗?
谢谢!
备注:我觉得我之前表达得不够清楚,所以我再给一个更具体的例子:
一个网页应用需要显示一个页面,这个页面包含从服务器接收到的数据。它通过调用server_pagetable.getData()来获取数据,然后对数据进行格式化,把它们转换成正确的Python类型(因为Corba没有日期类型等),最后生成要显示的HTML代码。
我想测试的就是这些接收数据、进行各种转换,最后生成HTML代码的方法。
我认为最简单的做法是模拟Corba对象,因为它们基本上包含了网络和数据库的功能(这些在单元测试中是不应该测试的)。
只是这样做需要做很多“额外的工作”——模拟所有的Corba对象(比如用户对象、服务器会话对象、分页表对象、管理员对象等等)。也许这只是因为我被Corba困住了,所以我必须用模拟来反映服务器规定的对象层次结构。另一方面,也可能是有一些很酷的优雅解决方案可以用来测试使用Corba的代码,只是我没有想到。
3 个回答
如果你想在中间测试一些单独的功能,我建议你使用模拟数据(其实就是一些数据,所以你可以生成模拟数据,而不是模拟类,如果可能的话)。模拟数据主要是在你没有完整代码的情况下使用,这些功能需要从那些代码部分获取一些输入,但因为你对它们不感兴趣或者没有这些代码,所以你简化了与它们的交互。
我也有类似的工作要做,但我可能不会为CORBA对象的实现或者更具体地说COM对象(CORBA的实现)写测试。我需要为使用这些结构的工作写测试,而不是为这些结构本身写测试(虽然如果我问太多问题,我也可能会被分配到那个角色)。
归根结底,单元测试就是在小范围内进行集成测试,所以每当我写测试时,我总是关注输入和输出,而不是实际的结构。从你描述的问题来看,我会把重点放在server_pagetable.getData()的数据和输出的HTML上,而不太关心中间发生了什么(因为那是你正在测试的代码,你不想在测试中定义代码,而是确保输出是正确的)。
我会搭建一个测试服务器,然后在上面进行实时测试。因为网络相关的单元测试可能会比较复杂,所以最好让测试尽量真实。如果需要模拟一些东西,比如需要和三个不同的服务器进行通信,可以在测试服务器上设置三个不同的IP地址,来代表这三个服务器的角色。
别试着对Corba进行单元测试。假设Corba是正常工作的。你要测试的是你自己的代码。这意味着:
首先,创建一个单元测试,检查你是否正确设置了Corba,并且可以调用一个方法和读取一个属性。如果这个能正常工作,其他的方法和属性也应该没问题。
之后,测试所有暴露出来的对象是否正常工作。这个测试不需要用到Corba。