繁体   English   中英

如何对双向文本处理进行单元测试

[英]How to unit-test bidirectional text handling

我正在尝试为一些字符串格式代码编写单元测试。 在某些情况下,格式化输出可能包含双向文本,即从左到右和从右到左的混合。

在Android设备或仿真器上运行时,我已经验证了输出看起来正确,适用于LTR和RTL输入和输出的所有组合。 不过,我正努力在单元测试中捕获这个; 在我的测试用例中,我不确定如何正确指定预期的输出。

例如,我想声明返回的字符串将像这样呈现:

-د.ك.123,456.78

也就是说,字形应该从左到右依次出现:

-

1

2

3

,

4

5

6

.

7

8

.

ك

.

د

(你甚至不知道在SO编辑框中将其编辑成正确的序列有多难!)

我尝试在我的测试用例中使用标准字符串比较方法,如下所示:

assertEquals("-د.ك.123,456.78", formattedOutput);

但是失败了,因为测试代码中的预期输出字符串正在重新排序其文本。 实际上它在源代码中的显示方式也有所不同,具体取决于我使用哪个工具查看源代码(Android Studio与Github-with-Chrome),所以我不相信它正在测试正确的东西。

我还尝试逐步构建预期输出值,以避免在编辑器中出现混淆,尽管它会导致在引擎盖下构建相同的字符串文字:

assertEquals("-123,456.78" + SYMBOL, formattedOutput);

如何比较字形的视觉顺序,而不是逻辑顺序? Android的BidiFormatter帮助我吗?

该字符串上的典型assertEquals和返回相同String的方法(即一个新的String对象)对我来说很好,使用IntelliJ 14.0.3 Ultimate,UTF-8设置为实际文本文件。

什么也可以,你可以尝试,是获取你想要比较的字符串的字节(可能手动指定一个特定的编码),然后使用assertArrayEquals比较返回的字节数组。 我不明白为什么至少使用手动设置编码获取String的字节不起作用。

如果您愿意,可以查看此页面以获取灵感: https//docs.oracle.com/javase/tutorial/i18n/text/string.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM