Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 在go中测试连接的正确方法_Unit Testing_Go_Networking_Concurrency_Deadlock - Fatal编程技术网

Unit testing 在go中测试连接的正确方法

Unit testing 在go中测试连接的正确方法,unit-testing,go,networking,concurrency,deadlock,Unit Testing,Go,Networking,Concurrency,Deadlock,我正在用测试覆盖这个项目,为此我需要一个虚拟TCP服务器,它可以接受连接,向它写入/读取数据,关闭它等等。。。我发现了关于堆栈溢出的问题,包括模拟连接,但它并没有包括我实际需要测试的内容 我的想法是以此为出发点,但当我开始实现通道,让服务器向新打开的连接写入一些数据时,我在写入通道时遇到了不可调试的死锁 我想要实现的是将一些数据写入服务器的通道,比如说发送队列chan*[]字节,因此稍后相应的[]字节将被发送到新建立的连接 在这些小小的研究中,我尝试在向频道发送数据之前/之后调试并打印消息,并尝

我正在用测试覆盖这个项目,为此我需要一个虚拟TCP服务器,它可以接受连接,向它写入/读取数据,关闭它等等。。。我发现了关于堆栈溢出的问题,包括模拟连接,但它并没有包括我实际需要测试的内容

我的想法是以此为出发点,但当我开始实现通道,让服务器向新打开的连接写入一些数据时,我在写入通道时遇到了不可调试的死锁

我想要实现的是将一些数据写入服务器的通道,比如说
发送队列chan*[]字节
,因此稍后相应的
[]字节
将被发送到新建立的连接

在这些小小的研究中,我尝试在向频道发送数据之前/之后调试并打印消息,并尝试在程序的不同位置从频道发送/读取数据

我的发现

  • 如果我直接在
    handleConnection
    中使用

    go func(){
    f:=[]字节(“测试”)
    
    t、 发送队列在一位同事的帮助下,阅读了关于
    init
    工作原理的文章后,我发现了一个问题


    这是在
    init
    函数中,由于使用
    :=
    分配,该函数正在重新创建额外的服务器。我还更新了代码,以确保服务器在
    net.Dial
    conn.Read

    之前运行。如果您将通道设置为缓冲,并且不在单独的goroutine中发送数据,那么您的#2解决方案应该可以工作在写入数据之前,请先连接到服务器。我也这么认为,但事实并非如此。在goroutine中发送数据有什么问题?通道写入应该是goroutine-safe的。因为无法保证goroutine何时启动。不存在数据争用,但存在逻辑争用。不幸的是,这没有帮助,感谢您的支持正在尝试。我使用/不使用goroutine和/或附加函数f.e.进行了测试。在
    TestUtils\u TestingTCPServer\u WritesRequest
    中从客户端建立连接之前,只需将数据发送到通道。您的主要代码在TestUtils\u TestingTCPServer\u WritesRequest()和init()中调用NewTestingTCPServer如果使用相同的端口,则会导致某些内容无法工作。