我该如何对Curses应用进行单元测试?

5
我正在做一个宠物项目,探索一些基于 Curses 的编程。怎样最好地为此编写单元测试呢?我考虑到 Rails 应用程序支持的一般导航类型测试(集成测试)。 (例如,我希望确保我的应用程序能够打开,向下移动一个条目,增加其优先级,将其标记为完成,然后干净地退出。)
稍微提供一些背景信息,我的应用程序 使用了 ncursesw gem。任何测试方法都可以。(Ruby, C, 等)
3个回答

5
与非curses应用程序的测试方式相同。将逻辑与用户界面分离,仅对逻辑进行测试。
因此,您不会测试菜单,但会测试菜单项调用的功能。

有道理--我想测试菜单没有直接的方法吧?我对确保特定按键映射到正确的菜单和功能很感兴趣。或者这通常被忽略,而选择手动QA测试? - Sauce McBoss
你需要在某个时刻划定一个界限,相信其他开发者写出可靠的代码。你可以模拟菜单,但这会变得非常痛苦且没有多大好处 - 菜单按键很少会变化。当我编写测试(任何大于玩具应用程序的东西),我会忽略用户界面并测试用户界面调用了什么。 - graham.reeds
谢谢澄清!测试最佳实践一直是我不太清楚的灰色地带。 - Sauce McBoss

5
这取决于您想要测试的方面。 要测试ncurses,它有一个跟踪功能(编译时选项),可提供详细信息。 对大多数人来说,这太底层了,并且向上移动一级,建议通常是编写(使用库)屏幕转储功能。 库没有提供这个功能,因为
  • 需求在保存哪些信息(以及如何保存)方面差别很大
  • 库提供了足够的功能,用户应用程序不需要扩展它来执行此操作。
ncurses库确实提供屏幕转储/恢复功能,但在较旧版本的ncurses中,信息以二进制形式保存(在某些方面不够灵活)。 这在 2015年初进行了修改,以文本格式将文件转储。 作为副作用,转储的diff更简单。

如果不进行屏幕截图,你必须依靠一个捕获屏幕的外部框架(这往往很复杂:关于X/Open页面上的"易于使用"的评论是乐观而不是现实),或者依靠某人检查屏幕并查看它们是否正确。我选择了使用屏幕截图方法来制作我的目录编辑器,使其记录命令并添加了一个用于进行屏幕截图的命令。重放命令(并比较连续运行)让我测试差异。

进一步阅读:


谢谢,这是很好的信息。我想知道如何测试ncurses与我的应用程序的集成,我编辑了问题以更好地反映这一点。 - Sauce McBoss

1
您可以运行一个独立的tmux会话并捕获输出:
tmux -u new-session -d -x 10 -y 10 -s foo
tmux send -t foo ls ENTER
sleep .5
tmux capture-pane -p
tmux kill-session -t foo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接