Ⅰ.2.9.如何测试支持国际化的Qt AUT

原创 2015年11月20日 10:17:59

Qt 支持创建国际化的应用程序。意思就是,举个例子,开发者可以创建一个Qt应用程序,在使用英语语言的地方(如U.S)该程序可以在menu选项和对话框标签上展示English文本,在用德语的地方显示German,以此类推。

如果Squish 使用了AUT对象属性——包括它们用来识别对象的文本来识别对象,当谈到这种测试的时候,国际化的AUT可能会引起问题。因此,举个例子,File 菜单项将会有下一个英语语言环境下的‘File’,法语语言环境下的‘Fichier’。如果使用英语为AUT记录测试脚本,该测试脚本将不能在西班牙语环境下进行回放,因为当AUT的文本都是西班牙语的时候,Squish将会寻找使用了英语文本的对象。

Squish提供了三种处理国际化的问题的方法。

2.9.1 自动转换翻译

尽管有一个重要的限制,但这个是最简单的处理国际化AUT的方法。

应该使用与开发AUT所用的相同的语言来创建(如,记录)一个国际化的AUT的测试。例如,如果AUT是在U.S中用English开发的,应该用English创建测试。原始的English文本存储在AUT中,并且可以访问,即使AUT运行在不同的语言黄精中,比如Swedish中,menu选项和对话框标签显示Swedish文本。

我们可以告诉Squish使用AUT的原始(如,English)文本,甚至在不同的语言环境(如,Swedish)中也可以让Squish使用AUT的原始文本,可以通过设置SQUISH_TRANSLATION_AWARE_LOOPUP环境变量为1实现。

在一些情况下,相同的文本根据上下文需要有不同的翻译。为了支持这个功能,Qt的国际化函数QObject.tr 允许第二个字串用于消除歧义。不幸的是,不像原始文本,消除歧义的文本没有存储在AUT中,因此Squish不能区别到底该使用哪个用于消除歧义的文本。避免这个问题的唯一的方法就是不使用消除歧义的文本或者使用其他的方法来测试显示文本的国际化AUT。

2.9.2 使用对象名字而非文本

解决这个问题的最容易的方法是AUT的开发者给AUT的对象起一个唯一的名字,可以通过Qt的QObject.setObjectName 方法来创建这个名字。该方法的文本用什么语言是没有关系的,因为文本没有被翻译,所以不管AUT运行于什么样的语言环境下文本仍然是相同的。下面是一个AUT的开发者如何实现这个功能的示例:

fileMenu = new QMenu(tr("File"));//text will be translated
fileMenu.setObjectName(file_menu_mainwindow);//text won't be translated

不幸的是,问题仍未解决,即使当给Qt对象赋一个显式的名字时,Squish会继续使用它们的text属性。解决这个问题的一个方法是从Squish对象名字中移除所有的属性,除了type 和 name 属性(name属性是对应于Qt 对象的name 属性的Squish的name)。一个更方便的解决方法是控制Squish如何产生对象名字,因此它将会自动的为拥有非空Qt 对象名字的AUT对象使用type 和name属性,而为那些Qt对象名字为空的属性使用Squish的标准方法。

2.9.3 以编程方式翻译对象名字

另一种处理国际化AUT的方法是自动的按需创建具体区域对象map,自动地加载区域相关的对象map代替默认的对象map。

一种实现上述功能的方法是写下一个测试脚本函数(可能以全局脚本的形式存储的),该脚本读取原始对象map(该map使用,描述English 文本),然后使用当前地区的语言(例如,Finnish)写出一个新的对象map,然后加载新创建的对象map。

不幸的是,翻译对象map还是不够的,因为‘items’的文本可能不在对象map中。对于这些情况,我们需要使用我们自定义的翻译函数,并将它应用于相关的文本。例如,给出的已记录一行:

activateItem(waitForObjectItem(":File_QMenu", "Quit"))
我们需要将它改成这样:

activateItem(waitForObjectItem(":File_QMenu", i18n("Quit")))
假设我们自定义的翻译函数叫i18n。





版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Ⅰ.2.6.8 如何测试QTable (Qt 3)

一个QTable由那些可以使用QTable::item函数返回的item组成的。 例如,为了测试一个text中包含“Kiwi”的cell是在第五行第四列(使用基于0的索引),可以使用下面的代码: ...

麦琪的礼物

麦琪的礼物 教案示例一   作者:番达 文章来源:网络共享 更新时间:2006-1-5 【字体:小 大】   教案示例一   第一课时     (一)明确目标     1.理清故事情节     2.掌...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Ⅰ.2.6.5 如何测试QAction、QMenu、以及QMenuBar(Qt 4)

如果我们想检查一个菜单项的属性,可以使用Squish IDE插入验证点,或者手写代码。这里我们介绍如何写代码。 QMenus(QWidgets 也是如此)有一份QAction 对象列表。我们可以获取这...

Ⅰ.19 如何实现自动化批量测试

这个部分将会阐释设置自动化测试运行的必要步骤,以及如何处理结果。 由创建一个处理Squish的测试结果的脚本开始(以XML格式输出),这个结果产生一个HTML文件,它包含的结果可以用web浏览区打开...

Ⅰ.4 如何使用测试语句

这个部分讨论Squish提供的用以执行测试的API,测试完会得到相应的结果。验证点也用这个测试API,更多的关于验证点的说明将在在17章中介绍。 比较两个值并将比较的结果写入测试日志,使用test.c...

Ⅰ.2.6.7 如何测试QListView (Qt 3)

这个部分介绍了如何验证一个Qt 3 list view widget(事实上是个tree widget)包含了我们所期望的items。 一种方法是遍历list view中的所有items,检查它们的每...

Ⅰ.2.8 如何做自动压力测试(Automatic Stress Testing)

这个部分解释了如何使用Squish为应用程序实现完全的自动化压力测试。 这里实现的压力测试的类型叫做“Monkey Testing”。这个名字来源于这样的想法:如果你有一屋子的猴子和打字机,不限制时间...

第Ⅰ部分 Squish教程

这篇Squish用户指南解释了所有Squish最常用的特性,提供了一些如何最好的使用Squish的示例。 该篇指南主要致力于Squish的脚本支持,不同的脚本语言支持,这里我们只给出Python的示例...

使用Squish自动化测试Qt APP心得

Squish可以自动化测试基于Qt的应用程序,经过一段时间学习,遇到一个很棘手的问题,就是Squish并不能检测QML中的MouseArea元素,每个可接受鼠标点击事件的item上都覆盖一个Mouse...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)