Ⅰ.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。





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

相关文章推荐

Ⅰ.15 如何修改Squish函数

一些情形下修改Squish的函数很有用——例如,在测试log中记录每个对特定函数的调用。一些脚本语言支持相同名字的函数替换其他的函数,因此我们可以在Squish中利用这种机制。但是记住大多数Squis...
  • dzh0622
  • dzh0622
  • 2015年12月04日 13:36
  • 325

Ⅰ.7 如何从一个测试脚本中测试多个AUT,使用ApplicationContext

通常,为每个测试套件指定单个被测试的应用程序。然后通过每个测试案例执行和访问这个AUT。所有的教程展示了单个测试套件方法或单个AUT方法,但是事实上,有可能开始多应用程序以及访问,以及在单个测试套件内...
  • dzh0622
  • dzh0622
  • 2015年11月21日 22:23
  • 478

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

这个部分介绍了如何验证一个Qt 3 list view widget(事实上是个tree widget)包含了我们所期望的items。 一种方法是遍历list view中的所有items,检查它们的每...
  • dzh0622
  • dzh0622
  • 2015年11月19日 09:41
  • 225

QT中文乱码与国际化支持

 QT国际化支持    Qt内部采用的全Unicode编码,这从根本上保证了多国语界面实现的正确性和便捷性。Qt本身提供的linguist工具,用来实现翻译过程十分方便。MFC中利用资源DLL切换资源...

Gstreamer插件教程2.9—编写一个插件(Writing a Plugin):构建一个测试应用(Building a Test Application)

你将经常想用尽可能小的设置来测试你新写的插件。通常,gst-launch-1.0是用于测试插件的第一步。如果你还未在Gstreamer的搜索目录上安装你的插件,你将需要设置插件路径。或者设置GST_P...

Qt之国际化

  • 2016年08月09日 09:47
  • 42KB
  • 下载

第Ⅰ部分 敏捷开发 第4章 测试

烈火验真金,逆境磨意志——卢修斯?塞尼加 编写单元测试是一种验证行为,更是设计行为,更是编写文档行为。避免了反馈循环。 ★4.1测试驱动的开发方法 设计程序先编写测试方案,单元测试是检验程序功能...
  • wzhwho
  • wzhwho
  • 2011年10月23日 17:45
  • 517

QT国际化中文

  • 2014年11月04日 14:33
  • 636KB
  • 下载

Qt翻译文件实现国际化

  • 2015年04月23日 10:11
  • 51KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ⅰ.2.9.如何测试支持国际化的Qt AUT
举报原因:
原因补充:

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