我负责编写的单元测试一套网络编写的软件蟒蛇。编写单位信息的建设者和其他静态的方法非常简单,但是我撞到墙的时候编写一个试验网络环线。

例如:服务器连接到可能在任何港口,我希望能够试验能够连接到许多港口(在序列,不行),而不必实际运行很多服务器。什么是一个很好的方式来处理这个?也许让服务器的建设和破坏一部分的测试?有东西告诉我有一个简单的答案,逃避我.

我必须想象一下有方法单元测试的联网线,但我似乎找不到任何。

有帮助吗?

解决方案

我将试图介绍一个工厂到现有的编码,目的是创建插座的对象。然后在一个测试通过在模拟工厂,创建模拟插座,这只是假装他们已经连接到一个服务器(或不为错误的情况下,这你也想要测试,不是吗?) 和日志的信息的流量,以证明你的代码有使用正确的港口连接到正确类型的服务器。

尽量不要使用螺纹只是还没有,简化检测。

其他提示

这取决于你的网络软件是分层和如何详细的你希望你的测试,但它肯定是可行的,在某些情况下使服务器安装和拆卸的一部分测试。例如,当我工作的蟒蛇记录包(前它成为的一部分Python),我有一个测试(我没用 pyunit/unittest -这只是一个临时的脚本),它解雇了(在一次测试)四个服务器上听TCP,UDP,HTTP并HTTP/皂港口,然后送网络交给他们。如果你有兴趣,分布 在这里, 和相关测试的脚本中存档看看是 log_test.py.蟒蛇记录包拥有的课程来某种方式从那以后,但旧的包还在使用的版本的蟒蛇 < 2.3和>=1.5.2.

我有一些试验的情况下运行的一个服务器的建立和关闭它在该拆除。我不知道如果这是非常优雅的方式做到这一点,但它作为我。

我高兴地有它它对我很有帮助。

如果服务器init很长,一个替代办法将是使用蚂蚁。蚂蚁将/停止服务器之前/后的执行测试。

看看 在这里, 非常有趣的教程有关的蚂蚁和蟒蛇

你会需要创建模拟插座。的确切方式这样做将取决于你如何创建插座和创造一座发电机将是一个很好的想法。你也可以使用的一种嘲讽库喜欢 pymox 让你的生活更加容易。它还可能消除的需要创造一座发电机只是对的唯一目的是测试。

使用pymox,你会做这样的事情:

def test_connect(self):
    m = mox.Mox()
    m.StubOutWithMock(socket, 'socket')
    socket_mock = m.MockAnything()
    m.socket.socket(socket.AF_INET, socket.SOCK_STREAM).AndReturn(socket_mock)
    socket_mock.connect(('test_server1', 80))
    socket_mock.connect(('test_server2', 81))
    socket_mock.connect(('test_server3', 82))

    m.ReplayAll()
    code_to_be_tested()
    m.VerifyAll()
    m.UnsetStubs()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top