我正在进行一些本地化测试,我必须测试英语和日语中的字符串。英文字符串可能是“等待时间为{0}分钟”。而日语字符串可能是'待ち时间は{0}分です。'其中{0}是一个可以在测试过程中改变的数字。这两个字符串都来自各自的属性文件。我如何能够检查字符串是否存在以及可以根据正在运行的测试而改变的数字。
我应该添加一个事实,即我在网页上检查这些字符串,这些字符串将根据查看位置的位置以相关语言显示。我正在使用watir验证文本。
答案 0 :(得分:0)
不要检查文字字符串。检查某种可用于渲染最终字符串的中间形式。
有时这是通过指定消息和任何占位符数据来完成的,例如:
[ :waiting_time_in_minutes, 10 ]
将其显示为适当的本地化文本。
另一种方法是将其中一种语言作为模板处理,这种方式在灵活性方面更有限,但大部分时间都有效。在这种情况下,您可以使用英语版本作为返回的字符串,并使用帮助程序将其呈现到最终页面。
答案 1 :(得分:0)
您可以在其他地方阅读有关正确语言转换测试的最佳方法的各种理论。
一种典型的方法是用常量替换代码中的所有硬编码文本匹配,然后有一个文件设置可以根据使用的语言更新的常量。 (我已经看到通过基于正在测试的语言将该文件的需求包装在case语句中来完成。另一种方法是每个值的数组或散列,由名为'language'的变量枚举,这让我们测试会动态改变语言。所以验证看起来像这样
b.div(:id => "wait-time-message).text.should == WAIT_TIME_MESSAGE[language]
要匹配预期部件发生变化但属于可预测模式的文本,请使用正则表达式。我建议稍微阅读ruby中的正则表达式,特别是在ruby中使用unicode正则表达式,以及使用像Rubular这样的工具来测试正则表达式
在上面的情况下,正则表达式如:
/Waiting time is \d+ minutes./
或/待ち時間は\d+分です。/
会匹配上面的消息,并期望中间的一个或多个数字(请注意,如果没有数字显示它会失败,如果你想要零或更多数字,那么你需要一个*来代替+