3

我正在尝试测试异步写入文件的日志记录模块...单元测试尝试读取日志以确保写入的消息与预期匹配。但是,我发现模块的异步写入直到单元测试完成后才到达文件,即使我睡觉等待文件任意时间长度也是如此。我通过在 aio_close 旁边添加打印语句来验证文件直到最后才关闭。我能做些什么来测试这个?

        #approximately the way this works:
        aio_open($pathname,
             $flags,
             $mode,
             sub
             {
                 my $fh = shift;
                 aio_write($fh,
                             0,
                             length($log),
                             $log,
                             0,
                             sub
                             {
                                 print "here";
                                 aio_close($fh, sub {});
                             });
             });
4

2 回答 2

2

好吧,挖了一点,我发现我可以打电话...

IO::AIO::flush;

这会导致所有异步缓冲区在我的测试执行之前刷新。

于 2011-08-30T20:26:51.747 回答
1

让您的文件编写器接受回调“done_writing”子。

如果提供,请调用它。

让单元测试提供一个回调,该回调要么创建一个触摸文件,要么只是在单元测试中填充一个“就绪”标志。

作为替代版本,让回调发出信号,并将单元测试设置为使用该信号的信号处理程序休眠

于 2011-08-30T20:03:44.900 回答