java - 如何使用 Lucene TestUtil 生成随机 Unicode 字符串

标签 java unit-testing lucene

我正在编写一些用于生成随机 Unicode 字符串的代码。我尝试使用 Lucene Test Utils 我的代码生成随机 Unicode 字符串如下

    for (int i = 0; i < 5000; i++) {
        Random random = new Random();
        final String s = TestUtil.randomUnicodeString(random, 12);
        //final String s = TestUtil.randomUnicodeString(random);Tried both
        final byte[] utf8 = new byte[s.length() * UnicodeUtil.MAX_UTF8_BYTES_PER_CHAR];
        final int utf8Len = UnicodeUtil.UTF16toUTF8(s, 0, s.length(), utf8);
        if(utf8Len !=8)
        {
            System.out.println("$$$$");
        }
    }

所以我检查了 Lucene 版本 6.2.0 的 lucene 代码中 randomUnicodeString 的实现

public static String randomUnicodeString(Random r, int maxLength) {
final int end = nextInt(r, 0, maxLength);
if (end == 0) {
  // allow 0 length
  return "";
}
final char[] buffer = new char[end];
randomFixedLengthUnicodeString(r, buffer, 0, buffer.length);
return new String(buffer, 0, end);

}

randomFixedLengthUnicodeString 的后续代码是

 public static void randomFixedLengthUnicodeString(Random random, char[] chars, int offset, int length) {
int i = offset;
final int end = offset + length;
while(i < end) {
  final int t = random.nextInt(5);
  if (0 == t && i < length - 1) {
    // Make a surrogate pair
    // High surrogate
    chars[i++] = (char) nextInt(random, 0xd800, 0xdbff);
    // Low surrogate
    chars[i++] = (char) nextInt(random, 0xdc00, 0xdfff);
  } else if (t <= 1) {
    chars[i++] = (char) random.nextInt(0x80);
  } else if (2 == t) {
    chars[i++] = (char) nextInt(random, 0x80, 0x7ff);
  } else if (3 == t) {
    chars[i++] = (char) nextInt(random, 0x800, 0xd7ff);
  } else if (4 == t) {
    chars[i++] = (char) nextInt(random, 0xe000, 0xffff);
  }
}

}

那么我收到异常的原因可能是什么

Exception in thread "main" java.lang.NoClassDefFoundError: com/carrotsearch/randomizedtesting/generators/RandomInts
at org.apache.lucene.util.TestUtil.nextInt(TestUtil.java:433)
at org.apache.lucene.util.TestUtil.randomUnicodeString(TestUtil.java:505)
at luceneLab.lab.main(lab.java:33)Caused by: java.lang.ClassNotFoundException: com.carrotsearch.randomizedtesting.generators.RandomInts
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 3 more

我是否为生成随机字符串的方法传递了错误的参数或我缺少的一些相互依赖关系? 提前致谢。

最佳答案

正如异常所说,您的项目中缺少 com/carrotsearch/randomizedtesting/generators/RandomInts 。看起来 TestUtil 使用 com.carrotsearch.randomizedtesting ,因此您需要将其作为依赖项添加到您的项目中。

关于java - 如何使用 Lucene TestUtil 生成随机 Unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52244952/

相关文章:

java - Web应用需要打开socket并支持一些协议(protocol)

java - 将自动值对象打印为 Java 源代码

elasticsearch - 有什么方法可以仅对Elasticsearch中的查询命中进行汇总?

php - 如何在elasticsearch中的功能增强查询中排序

Lucene 精确匹配查询

java - 在 JGiven 的测试场景中实现测试用例

java - 使用并行用户和登录验证码进行自动化测试(使用 selenium webdriver)

java - 无法访问我在其他类上创建的方法

unit-testing - 接收方方法相互调用时的单元测试

javascript - Jest 对调用返回 Promise 的函数的函数进行单元测试