在 Python 中对 Corba 进行单元测试

问题描述 投票:0回答:3

我对您对使用 Corba 与服务器通信的单元测试代码的看法很感兴趣。

你会嘲笑 Corba 对象吗?在 Python 中,这有点麻烦,因为 Corba 对象的所有方法都是动态加载的。所以你基本上坚持“模拟任何东西”。

谢谢!

注意: 我相信我说得还不够清楚,所以我会尝试举一个更具体的例子:

Web 应用程序需要显示包含从服务器接收到的数据的页面。它通过调用 server_pagetable.getData() 获取数据,然后格式化数据,将它们转换为正确的 python 类型(因为 Corba 没有例如日期类型等),最后创建要显示的 HTML 代码。

这就是我想要测试的 - 接收数据并进行所有转换并最终创建 HTML 代码的方法。

我认为最直接的决定是模拟 Corba 对象,因为它们本质上包含网络和数据库功能(不应在单元测试中测试)。

只是这需要做很多“额外工作”——模拟所有 Corba 对象(有一个 User 对象、一个服务器会话对象、pagetable 对象、一个 admin 对象等)。也许这只是因为我坚持使用 Corba,因此我必须用模拟来反映服务器规定的对象层次结构。另一方面,可能有一些很酷的优雅解决方案来使用 Corba 测试代码,但我没有想到。

python unit-testing mocking corba
3个回答
3
投票

不要尝试对 Corba 进行单元测试。假设 Corba 有效。单元测试你自己的代码。这意味着:

  1. 创建一个单元测试,检查您是否正确设置了 Corba,以及您是否可以调用单个方法并读取属性。如果可行,所有其他方法和属性也将有效。

  2. 之后,测试所有暴露的对象是否正常工作。你不需要 Corba。


2
投票

我会设置一个测试服务器,并对其进行实时测试。对于网络内容,单元测试可能很棘手,因此最好尽可能保持真实。任何模拟都将在测试服务器上完成,例如,如果您需要与三个不同的服务器通信,可以设置三个不同的 IP 地址来扮演所有三个服务器的角色。


1
投票

如果你想测试中间的单个函数,那么我会得到模拟数据(本质上仍然是数据,所以如果可能的话,你可以生成模拟数据而不是模拟类)。仅当您没有完整代码的某些部分并且这些函数需要来自代码的那些部分的一些输入但由于您对它们不感兴趣或没有它们时才使用模拟,因此您可以简化与它们的交互。

我有类似的工作要解决,但我可能不会为 CORBA 对象或更具体的 COM 对象(CORBA 的实现)的实现编写测试。我必须为使用这些结构而不是结构本身的工作编写测试(尽管如果我问太多问题,我也可以让自己担任那个角色)。

归根结底,单元测试是一种较小规模的集成,因此每当我编写测试时,我总是在考虑输入和输出,而不是实际结构。从您编写问题的方式来看,我的注意力将集中在 server_pagetable.getData() 的数据和输出 HTML 上,而不太关心两者之间发生的事情(因为那是您正在测试的代码,您不希望在测试中定义代码但确保输出正确)。

© www.soinside.com 2019 - 2024. All rights reserved.