微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将Google Test用于使用Glib事件循环的程序

如何解决将Google Test用于使用Glib事件循环的程序

我正在编写要在Linux中作为后台服务运行的程序。我正在用C ++编写它,并使用glibmm进行事件循环。

程序唯一的用户界面是D-Bus服务。

我想使用Google Test为其编写一些测试。我正在计划的是,虽然程序本身实例化了D-Bus服务,但是测试代码还将实例化D-Bus客户端并通过D-Bus调用来启动程序中的操作。

我想到的测试用例大多类似于“调用D-Bus方法并使用断言来查看使用某些参数调用某些方法”。测试的重要结果之一就是简单地看到测试不会崩溃。

我可以看到有关如何编写程序和测试的严格选项。例如,从理论上讲,可以在main()中创建一次事件循环,或者在每个测试用例中单独创建一次事件循环。如果仅创建一次,则在理论上仍然可以连续运行,也可以在每个测试用例中启动和停止它。我尝试使用谷歌搜索示例,但是只发现使用Qt而不是Glib的东西。我不知道这是否有很大的不同。

关于这种情况,是否存在任何现有的智慧?什么值得尝试,什么不值得?还是我打算将Google Test用作不适合的用途?

解决方法

您可能会发现,将服务器构建为具有C ++接口的库并使用普通的单元测试进行测试会更容易。暴露出D-Bus上的垫片层可能非常薄,不需要进行大量测试。

如果您确实想测试D-Bus服务,则将其编译到测试程序中可能会更容易(这样D-Bus客户端和服务器可以在同一进程中运行),因此您不必担心将服务器作为子进程处理(这增加了额外的复杂性,并使调试失败变得更加棘手)。

然后在一个线程中运行D-Bus服务,在另一个线程中运行D-Bus客户端+测试代码,以使它们不会彼此阻塞。

通常,在每次测试后销毁主上下文和主循环(以及其他任何上下文)比较安全,以确保您没有一个测试留下的状态影响下一个测试。尤其是,问题通常是由GSource中的一项测试留下的GMainContext导致下一次继续触发。

我无法评论这如何转化为对Google测试的使用。当然,可以使用普通的GLib unit testing API来做到这一点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。