我对您使用Corba与服务器通信的单元测试代码的意见感兴趣。
你会嘲笑Corba物品吗?在Python中,这是一种痛苦,因为Corba对象的所有方法都是动态加载的。所以你基本上坚持“嘲笑任何东西”。
谢谢!
注意: 我相信我还没有说清楚,所以我会试着给出一个更具体的例子:
Web应用程序需要显示包含从服务器接收的数据的页面。它通过调用server_pagetable.getData()获取数据,然后格式化数据,将它们转换为正确的python类型(因为Corba没有例如日期类型等),最后创建要显示的HTML代码。
这就是我想要测试的 - 接收数据并完成所有转换并最终创建HTML代码的方法。
我认为最直接的决定是模拟Corba对象,因为它们基本上包含网络和数据库功能(不应在单元测试中测试)。
只是这需要做很多“额外的工作” - 模拟所有Corba对象(有一个User对象,一个服务器会话对象,一个pagetable对象,一个admin对象等)。也许这只是因为我坚持使用Corba,因此我必须反映服务器用模拟决定的对象层次结构。另一方面,可能有一些很酷的优雅解决方案,使用Corba测试代码,但这并不是我的想法。
答案 0 :(得分:3)
不要试图对Corba进行单元测试。假设Corba有效。 Unittest 您自己的代码。这意味着:
创建一个单元测试,检查您是否正确设置了Corba,并且可以调用单个方法并读取属性。如果可以,那么所有其他方法和属性也会起作用。
之后,测试所有公开的对象是否正常工作。你不需要Corba。
答案 1 :(得分:1)
我会设置一个测试服务器,并对其进行实时测试。单元测试对于网络内容来说可能很棘手,因此最好尽可能保持真实。任何模拟都将在测试服务器上完成,例如,如果您需要与三个不同的服务器进行通信,则可以设置三个不同的IP地址来扮演所有三个服务器的角色。
答案 2 :(得分:0)
我有类似的工作要解决,但是我可能不会编写有关CORBA对象或更具体地COM对象(CORBA的实现)实现的测试。我必须为使用这些结构与结构本身相对的工作编写测试(尽管如果我提出太多问题,我也可以担任该职位)。归根结底,单元测试是较小规模的集成,因此,每当我编写测试时,我总是在考虑输入和输出,而不是实际的结构。从您编写问题的方式来看,我的注意力将集中在server_pagetable.getData()的数据和输出HTML上,而无需过多关注它们之间发生的事情(因为这是您正在测试的代码,因此您不想定义测试中的代码,但请确保输出正确)。如果要在它们之间测试各个功能,则我将获得模拟数据(基本上是静态数据,因此可以生成模拟数据而不是模拟类)。只有在您没有完整代码的一部分并且这些函数需要代码的这些部分的某些输入时才使用Mocks,但是由于您对它们不感兴趣或没有它们,因此可以简化与它们的交互。这只是我的意见。