代码之家  ›  专栏  ›  技术社区  ›  Lahiru Chandima

黄瓜场景中的随机字符串

  •  0
  • Lahiru Chandima  · 技术社区  · 7 年前

    我正在测试的系统不允许删除实体。系统需要以特殊模式启动才能删除实体,因此删除测试后创建的实体不是一个选项。

    when user creates a new Branch with following values:
    |Branch ID|<random_string_1>|
    |Address|1, abc, def.|
    |Telephone|01111111111|
    And user searches for a branch by "Branch ID" = "<random_string_1>"
    Then branch details should be as following
    |Branch ID|<random_string_1>|
    |Address|1, abc, def.|
    |Telephone|01111111111|
    

    黄瓜里有做这种事的选择吗?或者,我还有其他方法可以做到这一点吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Lahiru Chandima    6 年前

    public class RandomStringTransformer extends Transformer<String> {
        private static final Map<String, String> RANDOM_STRINGS = new HashMap<>();   //Key -> random string
        public static final RandomStringTransformer INSTANCE = new RandomStringTransformer();
    
        @Override
        public String transform(String input) {
            return transformString(input);
        }
    
        public DataTable transform(DataTable dataTable) {
            dataTable.getGherkinRows().forEach(dataTableRow -> dataTableRow.getCells().replaceAll(this::transformString));
            return dataTable;
        }
    
        private String transformString(String input) {
            final String[] inputCopy = {input};
            Map<String, String> replacements = new HashMap<>();
            Matcher matcher = Pattern.compile("(<random_string_[^>]*>)").matcher(input);
            while (matcher.find()) {
                String group = matcher.group(0);
                replacements.put(group, RANDOM_STRINGS.computeIfAbsent(group, key -> Utilities.getNextUniqueString()));
            }
            replacements.forEach((key, value) -> inputCopy[0] = inputCopy[0].replace(key, value));
            return inputCopy[0];
        }
    }
    

    @When("^user creates a branch of name "([^"]*)" with following values$")
    public void branchIsCreatedWithDetails(@Transform(RandomStringTransformer.class) String branchName, DataTable fieldValues) {
        fieldValues = RandomStringTransformer.INSTANCE.transform(fieldValues);
    
        //Now, fieldValues table values and branchName are replaced with random values if they were in format <random_string_SOMETHING>
    }
    
        2
  •  1
  •   Mostafa Barmshory    6 年前

    @When("^user creates a branch of name "([^"]*)" with following values$")
    public void instanceTableIsFilteredForUniqueInstanceBy(String branchName, DataTable fieldValues) {
        fieldValues = RandomStringTransformer.INSTANCE.transform(fieldValues);
    
        //Now, fieldValues table values and branchName are replaced with random values if they were in format <random_string_SOMETHING>
    }
    

    http://grasshopper.tech/98/