【问题标题】:RandomStringUtils generate similar values in one run. How to generate different?RandomStringUtils 在一次运行中生成相似的值。如何产生不一样的?
【发布时间】:2019-03-17 13:53:46
【问题描述】:

我有问题。 在一次测试运行中,我在每次测试中生成随机数字变量(但具有字符串类型)。 我为此使用了 RandomStringUtils 库。

但它只为所有测试生成该变量的一个值。如何在每次测试中产生新价值

例子:

public void test() {
    JsonResponse response = dosomething(baseUrl(), generateId());
    assert something
}

以及其他类中的 generateId() 方法

public static String generateId(){
        return RandomStringUtils.randomNumeric(6);
    }

整个测试套件看起来像(我得到的所有 generateId() 值都相等):

public class Tests {
public void test1() {
        JsonResponse response = dosomething(baseUrl(), generateId());
        assert something
    }

public void test2() {
        JsonResponse response = dosomething(baseUrl(), generateId());
        assert something
    }
}
public void test3() {
        JsonResponse response = dosomething(baseUrl(), generateId());
        assert something
    }

apache 版本是 3.7(在外部库中)

Export-Package: org.apache.commons.lang3;version="3.7",org.apache.comm
 ons.lang3.arch;version="3.7",org.apache.commons.lang3.builder;version
 ="3.7",org.apache.commons.lang3.concurrent;version="3.7",org.apache.c
 ommons.lang3.event;version="3.7",org.apache.commons.lang3.exception;v
 ersion="3.7",org.apache.commons.lang3.math;version="3.7",org.apache.c
 ommons.lang3.mutable;version="3.7",org.apache.commons.lang3.reflect;v
 ersion="3.7",org.apache.commons.lang3.text;version="3.7",org.apache.c
 ommons.lang3.text.translate;version="3.7",org.apache.commons.lang3.ti
 me;version="3.7",org.apache.commons.lang3.tuple;version="3.7"

【问题讨论】:

  • 您的整个测试套件看起来如何?
  • @syntagma 我已添加到问题中
  • Apache Commons 的哪个版本?您如何运行测试(CI、本地、docker 容器、VM 等)?
  • @jannis apache 3.3.7,本地
  • 你从哪里拿来的?给我们一个链接或者一个 Maven/Gradle 依赖 sn-p。我在 Maven Central 中找不到 3.3.7 版本:mvnrepository.com/artifact/org.apache.commons/commons-lang3

标签: java variables random testng


【解决方案1】:

我试过你的代码,每次测试都得到不同的数字。

通过RandomStringUtils.randomNumeric(final int count)调用可以看到有如下代码:

random(count, start, end, letters, numbers, null, RANDOM);

可能,您对 Random 有很奇怪的问题。无论如何,你可以尝试用你自己的 Random 对象来调用它。不要忘记创建具有不同 种子 编号的随机对象。

【讨论】:

  • 我已经尝试过使用随机来自 StringUtils 的想法......是的,它有效。但是……如何。我不明白我有什么问题
【解决方案2】:

RandomStringUtils 已弃用

从 3.6 开始,改用 commons-text RandomStringGenerator

使用以下替换代码示例:

// Generates a 20 code point string, using only the letters a-z
RandomStringGenerator generator = new RandomStringGenerator.Builder()
 .withinRange('a', 'z').build();
String randomLetters = generator.generate(20);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2014-09-10
    • 1970-01-01
    相关资源
    最近更新 更多