This is an automated email from the ASF dual-hosted git repository.

xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new 25fb2263f [ISSUE 4228] fixed generate mock data in multithreading 
(#4229)
25fb2263f is described below

commit 25fb2263ff632a74ca43ce8975a501bb3daf857f
Author: 愿凌飞 <[email protected]>
AuthorDate: Fri Dec 2 17:26:52 2022 +0800

    [ISSUE 4228] fixed generate mock data in multithreading (#4229)
    
    Co-authored-by: xiaoyu <[email protected]>
---
 .../plugin/mock/generator/ArrayGenerator.java      | 28 +++-----
 .../plugin/mock/generator/BoolGenerator.java       |  4 +-
 .../mock/generator/CurrentTimeGenerator.java       | 23 +++----
 .../plugin/mock/generator/EmailGenerator.java      |  4 +-
 .../plugin/mock/generator/EnStringGenerator.java   | 16 ++---
 .../plugin/mock/generator/ExpressionGenerator.java | 13 ++--
 .../shenyu/plugin/mock/generator/Generator.java    | 76 ++++++++++++----------
 .../plugin/mock/generator/GeneratorFactory.java    |  4 +-
 .../plugin/mock/generator/PhoneGenerator.java      |  4 +-
 .../mock/generator/RandomDoubleGenerator.java      | 25 +++----
 .../plugin/mock/generator/RandomIntGenerator.java  | 16 ++---
 .../plugin/mock/generator/RangeDataGenerator.java  | 17 ++---
 .../plugin/mock/generator/ZhStringGenerator.java   | 17 ++---
 .../plugin/mock/generator/ArrayGeneratorTest.java  |  9 +--
 .../plugin/mock/generator/BoolGeneratorTest.java   | 19 +++---
 .../mock/generator/CurrentTimeGeneratorTest.java   | 12 ++--
 .../plugin/mock/generator/EmailGeneratorTest.java  | 13 ++--
 .../mock/generator/EnStringGeneratorTest.java      | 13 ++--
 .../mock/generator/ExpressionGeneratorTest.java    | 45 ++++++-------
 .../plugin/mock/generator/PhoneGeneratorTest.java  | 19 +++---
 .../mock/generator/RandomDoubleGeneratorTest.java  | 18 +++--
 .../mock/generator/RandomIntGeneratorTest.java     | 17 ++---
 .../mock/generator/RangeDataGeneratorTest.java     | 23 ++++---
 .../mock/generator/ZhStringGeneratorTest.java      | 15 ++---
 24 files changed, 195 insertions(+), 255 deletions(-)

diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ArrayGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ArrayGenerator.java
index ac686eceb..923a5ed0b 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ArrayGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ArrayGenerator.java
@@ -28,43 +28,35 @@ import java.util.stream.IntStream;
  */
 @Join
 public class ArrayGenerator implements Generator<String> {
-    
-    private Integer length;
-    
-    private String repeatContent;
-    
+
     @Override
     public String getName() {
         return "array";
     }
-    
+
     @Override
-    public String generate() {
-        String replaceContentCopy = repeatContent;
+    public String doGenerate(final List<String> params, final String rule) {
+        int length = Integer.parseInt(rule.substring(rule.lastIndexOf("|") + 
1));
+
+        String replaceContentCopy = rule.substring(rule.indexOf("|") + 1, 
rule.lastIndexOf("|"));
         return IntStream.rangeClosed(0, length - 1)
                 .mapToObj(i -> GeneratorFactory.dealRule(replaceContentCopy))
                 .collect(Collectors.joining(","));
     }
-    
+
     @Override
     public int getParamSize() {
         return 0;
     }
-    
-    @Override
-    public void initParam(final List<String> params, final String rule) {
-        length = Integer.parseInt(rule.substring(rule.lastIndexOf("|") + 1));
-        repeatContent = rule.substring(rule.indexOf("|") + 1, 
rule.lastIndexOf("|"));
-    }
-    
+
     @Override
     public boolean match(final String rule) {
         return rule.matches("^array\\|.+\\|\\d+$");
     }
-    
+
     @Override
     public String[] getPrefixAndSuffix() {
         return new String[]{"[", "]"};
     }
-    
+
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/BoolGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/BoolGenerator.java
index 5149e9f05..3d3618911 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/BoolGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/BoolGenerator.java
@@ -20,6 +20,8 @@ package org.apache.shenyu.plugin.mock.generator;
 import org.apache.shenyu.plugin.mock.util.MockUtil;
 import org.apache.shenyu.spi.Join;
 
+import java.util.List;
+
 /**
  * Boolean Generator.
  */
@@ -32,7 +34,7 @@ public class BoolGenerator implements Generator<Boolean> {
     }
 
     @Override
-    public Boolean generate() {
+    public Boolean doGenerate(final List<String> params, final String rule) {
         return MockUtil.bool();
     }
 
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/CurrentTimeGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/CurrentTimeGenerator.java
index bba44f180..df0418725 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/CurrentTimeGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/CurrentTimeGenerator.java
@@ -28,35 +28,30 @@ import java.util.List;
 @Join
 public class CurrentTimeGenerator implements Generator<String> {
 
-    private String format;
-    
     @Override
     public String getName() {
         return "current";
     }
-    
+
     @Override
-    public String generate() {
+    public String doGenerate(final List<String> params, final String rule) {
+        String format = null;
+        if (params.size() >= 1) {
+            format = params.get(0);
+        }
         return MockUtil.current(format);
     }
-    
+
     @Override
     public int getParamSize() {
         return 0;
     }
-    
-    @Override
-    public void initParam(final List<String> params, final String rule) {
-        if (params.size() >= 1) {
-            format = params.get(0);
-        }
-    }
-    
+
     @Override
     public boolean match(final String rule) {
         return rule.matches("^current(\\|.+)?");
     }
-    
+
     @Override
     public String[] getPrefixAndSuffix() {
         return new String[]{"\"", "\""};
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/EmailGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/EmailGenerator.java
index 4e3ea7513..2d981843b 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/EmailGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/EmailGenerator.java
@@ -20,6 +20,8 @@ package org.apache.shenyu.plugin.mock.generator;
 import org.apache.shenyu.plugin.mock.util.MockUtil;
 import org.apache.shenyu.spi.Join;
 
+import java.util.List;
+
 /**
  * Random email address generator.
  */
@@ -32,7 +34,7 @@ public class EmailGenerator implements Generator<String> {
     }
 
     @Override
-    public String generate() {
+    public String doGenerate(final List<String> params, final String rule) {
         return MockUtil.email();
     }
 
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/EnStringGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/EnStringGenerator.java
index 1dc7bcdab..2c47b3eca 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/EnStringGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/EnStringGenerator.java
@@ -28,17 +28,16 @@ import java.util.List;
 @Join
 public class EnStringGenerator implements Generator<String> {
 
-    private int min;
-
-    private int max;
-
     @Override
     public String getName() {
         return "zh";
     }
 
     @Override
-    public String generate() {
+    public String doGenerate(final List<String> params, final String rule) {
+        String[] range = params.get(0).split("-");
+        int min = Integer.parseInt(range[0]);
+        int max = Integer.parseInt(range[1]);
         return MockUtil.en(min, max);
     }
 
@@ -47,13 +46,6 @@ public class EnStringGenerator implements Generator<String> {
         return 1;
     }
 
-    @Override
-    public void initParam(final List<String> params, final String rule) {
-        String[] range = params.get(0).split("-");
-        min = Integer.parseInt(range[0]);
-        max = Integer.parseInt(range[1]);
-    }
-
     @Override
     public boolean match(final String rule) {
         return rule.matches("^en\\|\\d+-\\d+$");
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ExpressionGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ExpressionGenerator.java
index 8cdcc5364..9dc00d02e 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ExpressionGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ExpressionGenerator.java
@@ -38,16 +38,18 @@ public class ExpressionGenerator implements 
Generator<String> {
 
     private static final EvaluationContext CONTEXT = initContext();
 
-    private String expression;
-
     @Override
     public String getName() {
         return "expression";
     }
 
     @Override
-    public String generate() {
+    public String doGenerate(final List<String> params, final String rule) {
+
+        String expression = params.get(0);
+
         Object val = PARSER.parseExpression(expression).getValue(CONTEXT);
+
         if (val instanceof MockUtil.FormatDouble) {
             return val.toString();
         }
@@ -59,11 +61,6 @@ public class ExpressionGenerator implements 
Generator<String> {
         return 1;
     }
 
-    @Override
-    public void initParam(final List<String> params, final String rule) {
-        expression = params.get(0);
-    }
-
     @Override
     public boolean match(final String rule) {
         return rule.matches("^expression\\|.+");
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/Generator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/Generator.java
index 53c38d988..bc60d14d0 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/Generator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/Generator.java
@@ -29,55 +29,41 @@ import java.util.stream.Collectors;
  */
 @SPI
 public interface Generator<T> {
-    
+
     /**
      * rule name.
      *
      * @return name
      */
     String getName();
-    
+
+    /**
+     * generate mock data.
+     * @param rule rule
+     * @return mock data
+     */
+    default T generate(String rule) {
+        List<String> params = extractParams(rule);
+        return doGenerate(params, rule);
+    }
+
     /**
      * generate mock data.
      *
-     * @return random data
+     * @param params params
+     * @param rule   rule
+     * @return mock data
      */
-    T generate();
-    
+    T doGenerate(List<String> params, String rule);
+
     /**
      * get size of rule params.
      *
      * @return params size
      */
     int getParamSize();
-    
-    /**
-     * init generator.
-     *
-     * @param rule rule
-     */
-    default void parseRule(final String rule) {
-        List<String> params = new ArrayList<>();
-        String[] split = rule.split("(?<!\\\\)\\|");
-        if (split.length >= getParamSize() + 1) {
-            params.addAll(Arrays.stream(split)
-                    .map(p -> p.replaceAll("\\\\\\|", "|"))
-                    .skip(1)
-                    .collect(Collectors.toList()));
-        }
-        initParam(params, rule);
-    }
-    
-    /**
-     * param from rule.
-     *
-     * @param params rule params.
-     * @param rule   source rule content
-     */
-    default void initParam(List<String> params, String rule) {
-    
-    }
-    
+
+
     /**
      * Determine whether the rule meets the format requirements.
      *
@@ -85,8 +71,8 @@ public interface Generator<T> {
      * @return if match return true.
      */
     boolean match(String rule);
-    
-    
+
+
     /**
      * return prefix and suffix for generate data.
      *
@@ -95,5 +81,23 @@ public interface Generator<T> {
     default String[] getPrefixAndSuffix() {
         return new String[]{"", ""};
     }
-    
+
+    /**
+     * extract params from rule.
+     *
+     * @param rule rule
+     * @return params
+     */
+    default List<String> extractParams(final String rule) {
+        List<String> params = new ArrayList<>();
+        String[] split = rule.split("(?<!\\\\)\\|");
+        if (split.length >= getParamSize() + 1) {
+            params.addAll(Arrays.stream(split)
+                    .map(p -> p.replaceAll("\\\\\\|", "|"))
+                    .skip(1)
+                    .collect(Collectors.toList()));
+        }
+        return params;
+    }
+
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/GeneratorFactory.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/GeneratorFactory.java
index 45154d9b2..69a2221ce 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/GeneratorFactory.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/GeneratorFactory.java
@@ -78,8 +78,7 @@ public final class GeneratorFactory {
 
         String[] prefixAndSuffix = generator.getPrefixAndSuffix();
         try {
-            generator.parseRule(ruleContent);
-            Object generateData = generator.generate();
+            Object generateData = generator.generate(ruleContent);
             return String.join("", prefixAndSuffix[0], 
generateData.toString(), prefixAndSuffix[1]);
         } catch (Exception e) {
             LOG.error(e.getMessage(), e);
@@ -128,4 +127,5 @@ public final class GeneratorFactory {
         }
         return null;
     }
+
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/PhoneGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/PhoneGenerator.java
index 4edcd1f30..e6d00dc75 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/PhoneGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/PhoneGenerator.java
@@ -20,6 +20,8 @@ package org.apache.shenyu.plugin.mock.generator;
 import org.apache.shenyu.plugin.mock.util.MockUtil;
 import org.apache.shenyu.spi.Join;
 
+import java.util.List;
+
 /**
  * 11-digit mobile number generator.
  */
@@ -32,7 +34,7 @@ public class PhoneGenerator implements Generator<String> {
     }
 
     @Override
-    public String generate() {
+    public String doGenerate(final List<String> params, final String rule) {
         return MockUtil.phone();
     }
 
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RandomDoubleGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RandomDoubleGenerator.java
index 82e4fe6b5..6f0d643f9 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RandomDoubleGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RandomDoubleGenerator.java
@@ -29,19 +29,20 @@ import java.util.Objects;
 @Join
 public class RandomDoubleGenerator implements Generator<String> {
 
-    private Double min;
-
-    private Double max;
-
-    private String format;
-
     @Override
     public String getName() {
         return "double";
     }
 
     @Override
-    public String generate() {
+    public String doGenerate(final List<String> params, final String rule) {
+        String[] range = params.get(0).split("-");
+        double min = Double.parseDouble(range[0]);
+        double max = Double.parseDouble(range[1]);
+        String format = null;
+        if (params.size() == 2) {
+            format = Objects.equals(params.get(1), "") ? null : params.get(1);
+        }
         return MockUtil.randomDouble(min, max, format).toString();
     }
 
@@ -50,16 +51,6 @@ public class RandomDoubleGenerator implements 
Generator<String> {
         return 1;
     }
 
-    @Override
-    public void initParam(final List<String> params, final String rule) {
-        String[] range = params.get(0).split("-");
-        min = Double.parseDouble(range[0]);
-        max = Double.parseDouble(range[1]);
-        if (params.size() == 2) {
-            format = Objects.equals(params.get(1), "") ? null : params.get(1);
-        }
-    }
-
     @Override
     public boolean match(final String rule) {
         return rule.matches("^double\\|\\d+(?:\\.\\d+)?-\\d+(?:\\.\\d+)?.*");
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RandomIntGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RandomIntGenerator.java
index d48502c42..a192b5588 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RandomIntGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RandomIntGenerator.java
@@ -28,17 +28,16 @@ import java.util.List;
 @Join
 public class RandomIntGenerator implements Generator<Integer> {
 
-    private int min;
-
-    private int max;
-
     @Override
     public String getName() {
         return "int";
     }
 
     @Override
-    public Integer generate() {
+    public Integer doGenerate(final List<String> params, final String rule) {
+        String[] range = params.get(0).split("-");
+        int min = Integer.parseInt(range[0]);
+        int max = Integer.parseInt(range[1]);
         return MockUtil.randomInt(min, max);
     }
 
@@ -47,13 +46,6 @@ public class RandomIntGenerator implements 
Generator<Integer> {
         return 1;
     }
 
-    @Override
-    public void initParam(final List<String> params, final String rule) {
-        String[] range = params.get(0).split("-");
-        min = Integer.parseInt(range[0]);
-        max = Integer.parseInt(range[1]);
-    }
-
     @Override
     public boolean match(final String rule) {
         return rule.matches("^int\\|\\d+-\\d+$");
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RangeDataGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RangeDataGenerator.java
index 60cbbbb09..98ee2fdb7 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RangeDataGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/RangeDataGenerator.java
@@ -29,15 +29,18 @@ import java.util.List;
 @Join
 public class RangeDataGenerator implements Generator<String> {
 
-    private String[] data;
-
     @Override
     public String getName() {
         return "list";
     }
 
     @Override
-    public String generate() {
+    public String doGenerate(final List<String> params, final String rule) {
+        String rangeData = params.get(0).replaceAll("\\[(.+)]", "$1");
+        String[] data = Arrays.stream(rangeData.split("(?<!\\\\),"))
+                .map(_data -> _data.replace("\\,", ","))
+                .toArray(String[]::new);
+
         return MockUtil.oneOf(data).toString();
     }
 
@@ -46,14 +49,6 @@ public class RangeDataGenerator implements Generator<String> 
{
         return 0;
     }
 
-    @Override
-    public void initParam(final List<String> params, final String rule) {
-        String rangeData = params.get(0).replaceAll("\\[(.+)]", "$1");
-        data = Arrays.stream(rangeData.split("(?<!\\\\),"))
-                .map(data -> data.replace("\\,", ","))
-                .toArray(String[]::new);
-    }
-
     @Override
     public boolean match(final String rule) {
         boolean matches = rule.matches("^list\\|\\[.+]$");
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ZhStringGenerator.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ZhStringGenerator.java
index 9f6e00668..9f19e512a 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ZhStringGenerator.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ZhStringGenerator.java
@@ -28,17 +28,17 @@ import java.util.List;
 @Join
 public class ZhStringGenerator implements Generator<String> {
 
-    private int min;
-
-    private int max;
-
     @Override
     public String getName() {
         return "zh";
     }
 
     @Override
-    public String generate() {
+    public String doGenerate(final List<String> params, final String rule) {
+        String[] range = params.get(0).split("-");
+        int min = Integer.parseInt(range[0]);
+        int max = Integer.parseInt(range[1]);
+
         return MockUtil.zh(min, max);
     }
 
@@ -47,13 +47,6 @@ public class ZhStringGenerator implements Generator<String> {
         return 1;
     }
 
-    @Override
-    public void initParam(final List<String> params, final String rule) {
-        String[] range = params.get(0).split("-");
-        min = Integer.parseInt(range[0]);
-        max = Integer.parseInt(range[1]);
-    }
-
     @Override
     public boolean match(final String rule) {
         return rule.matches("^zh\\|\\d+-\\d+$");
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ArrayGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ArrayGeneratorTest.java
index 451510ccb..6f75ab0b8 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ArrayGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ArrayGeneratorTest.java
@@ -32,19 +32,16 @@ public final class ArrayGeneratorTest {
 
     @Test
     public void testGenerate() {
-        arrayGenerator.parseRule("array|\"test\"|3");
-        String generate = arrayGenerator.generate();
+        String generate = arrayGenerator.generate("array|\"test\"|3");
         assertEquals("\"test\",\"test\",\"test\"", generate);
     }
 
     @Test
     public void testNestRuleGenerate() {
-        arrayGenerator.parseRule("array|{\"ints\":${array|10|3}}|3");
-        String generate = arrayGenerator.generate();
+        String generate = 
arrayGenerator.generate("array|{\"ints\":${array|10|3}}|3");
         
assertEquals("{\"ints\":[10,10,10]},{\"ints\":[10,10,10]},{\"ints\":[10,10,10]}",
 generate);
 
-        arrayGenerator.parseRule("array|{\"int\":${expression|#oneOf(10)}}|3");
-        generate = arrayGenerator.generate();
+        generate = 
arrayGenerator.generate("array|{\"int\":${expression|#oneOf(10)}}|3");
         assertEquals("{\"int\":10},{\"int\":10},{\"int\":10}", generate);
     }
 
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/BoolGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/BoolGeneratorTest.java
index 4da962ceb..6ca2816f0 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/BoolGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/BoolGeneratorTest.java
@@ -17,31 +17,30 @@
 
 package org.apache.shenyu.plugin.mock.generator;
 
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 /**
  * The test case for {@link BoolGenerator}.
  */
 public final class BoolGeneratorTest {
-    
+
     private final BoolGenerator boolGenerator = new BoolGenerator();
-    
+
     @Test
     public void testGenerate() {
-        boolGenerator.parseRule("bool");
-        Boolean generate = boolGenerator.generate();
+        Boolean generate = boolGenerator.generate("bool");
         Assertions.assertNotNull(generate);
-        
+
     }
-    
+
     @Test
     public void testMatch() {
         assertTrue(boolGenerator.match("bool"));
         assertFalse(boolGenerator.match("boolean"));
-        
+
     }
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/CurrentTimeGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/CurrentTimeGeneratorTest.java
index 0d0e8fdb7..ebe0fbb26 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/CurrentTimeGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/CurrentTimeGeneratorTest.java
@@ -24,17 +24,15 @@ import org.junit.jupiter.api.Test;
  * The test case for {@link CurrentTimeGenerator}.
  */
 public final class CurrentTimeGeneratorTest {
-    
+
     private final CurrentTimeGenerator generator = new CurrentTimeGenerator();
-    
+
     @Test
     public void testGenerate() {
-        generator.parseRule("${current}");
-        
Assertions.assertTrue(generator.generate().matches("^\\d{4}(-\\d{2}){2} 
\\d{2}(:\\d{2}){2}$"));
-        generator.parseRule("current|YYYY-MM-dd");
-        
Assertions.assertTrue(generator.generate().matches("^\\d{4}(-\\d{2}){2}$"));
+        
Assertions.assertTrue(generator.generate("current").matches("^\\d{4}(-\\d{2}){2}
 \\d{2}(:\\d{2}){2}$"));
+        
Assertions.assertTrue(generator.generate("current|YYYY-MM-dd").matches("^\\d{4}(-\\d{2}){2}$"));
     }
-    
+
     @Test
     public void testMatch() {
         Assertions.assertTrue(generator.match("current"));
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/EmailGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/EmailGeneratorTest.java
index 7e299bb76..ee22fcb22 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/EmailGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/EmailGeneratorTest.java
@@ -17,26 +17,25 @@
 
 package org.apache.shenyu.plugin.mock.generator;
 
+import org.junit.jupiter.api.Test;
+
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.jupiter.api.Test;
-
 /**
  * The test case for {@link EmailGenerator}.
  */
 public final class EmailGeneratorTest {
-    
+
     private final EmailGenerator generator = new EmailGenerator();
-    
+
     @Test
     public void testGenerate() {
-        generator.parseRule("email");
-        String email = generator.generate();
+        String email = generator.generate("email");
         assertNotNull(email);
     }
-    
+
     @Test
     public void match() {
         assertTrue(generator.match("email"));
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/EnStringGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/EnStringGeneratorTest.java
index cad289806..04dd738eb 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/EnStringGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/EnStringGeneratorTest.java
@@ -17,27 +17,26 @@
 
 package org.apache.shenyu.plugin.mock.generator;
 
+import org.junit.jupiter.api.Test;
+
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.jupiter.api.Test;
-
 /**
  * The test case for {@link EnStringGenerator}.
  */
 public final class EnStringGeneratorTest {
-    
+
     private final EnStringGenerator generator = new EnStringGenerator();
-    
+
     @Test
     public void testGenerate() {
         int max = 10;
         int min = 5;
-        generator.parseRule("en|" + min + "-" + max);
-        String enString = generator.generate();
+        String enString = generator.generate("en|" + min + "-" + max);
         assertTrue(enString.matches("[a-zA-Z]{" + min + "," + max + "}"));
     }
-    
+
     @Test
     public void testMatch() {
         assertTrue(generator.match("en|10-12"));
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ExpressionGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ExpressionGeneratorTest.java
index 1a0df96c8..499ad962b 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ExpressionGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ExpressionGeneratorTest.java
@@ -42,48 +42,46 @@ public class ExpressionGeneratorTest {
     @Test
     public void testGenerate() {
 
-        generator.parseRule("expression|T(java.time.LocalDate).now()");
-        assertThat(generator.generate(), 
is(JsonUtils.toJson(LocalDate.now().toString())));
+        
assertThat(generator.generate("expression|T(java.time.LocalDate).now()"),
+                is(JsonUtils.toJson(LocalDate.now().toString())));
 
-        generator.parseRule("expression|1==1");
-        assertThat(generator.generate(), is("true"));
+        assertThat(generator.generate("expression|1==1"),
+                is("true"));
     }
 
     @Test
     public void testBoolGenerate() {
-        generator.parseRule("expression|#bool()");
-        String generate = generator.generate();
+        String generate = generator.generate("expression|#bool()");
         assertThat(generate, in(Arrays.asList("true", "false")));
 
     }
 
     @Test
     public void testCurrentTimeGenerate() {
-        generator.parseRule("expression|#current()");
-        assertTrue(generator.generate().matches("^\"\\d{4}(-\\d{2}){2} 
\\d{2}(:\\d{2}){2}\"$"));
-        generator.parseRule("expression|#current('YYYY-MM-dd')");
-        assertTrue(generator.generate().matches("^\"\\d{4}(-\\d{2}){2}\"$"));
+        assertThat(generator.generate("expression|#current()"),
+                matchesRegex("^\"\\d{4}(-\\d{2}){2} \\d{2}(:\\d{2}){2}\"$"));
+
+        generator.generate("expression|#current('YYYY-MM-dd')");
+        assertThat(generator.generate("expression|#current('YYYY-MM-dd')"),
+                matchesRegex("^\"\\d{4}(-\\d{2}){2}\"$"));
     }
 
     @Test
     public void testEmailTimeGenerate() {
-        generator.parseRule("expression|#email()");
-        assertNotNull(generator.generate());
+        assertNotNull(generator.generate("expression|#email()"));
     }
 
     @Test
     public void testEnStringGenerate() {
         int max = 10;
         int min = 5;
-        generator.parseRule(String.format("expression|#en(%d,%d)", min, max));
-        String enString = generator.generate();
+        String enString = 
generator.generate(String.format("expression|#en(%d,%d)", min, max));
         assertThat(enString, matchesRegex("\"[a-zA-Z]{" + min + "," + max + 
"}\""));
     }
 
     @Test
     public void testPhoneGenerate() {
-        generator.parseRule("expression|#phone()");
-        String phone = generator.generate();
+        String phone = generator.generate("expression|#phone()");
         assertTrue(phone.matches("^\"1[3-9]\\d{9}\"$"));
     }
 
@@ -91,12 +89,10 @@ public class ExpressionGeneratorTest {
     public void testRandomDoubleGenerate() {
         double min = 10.5;
         double max = 12.0;
-        generator.parseRule(String.format("expression|#double(%f,%f)", min, 
max));
-        String doubleValue = generator.generate();
+        String doubleValue = 
generator.generate(String.format("expression|#double(%f,%f)", min, max));
         assertThat(Double.valueOf(doubleValue), 
allOf(greaterThanOrEqualTo(min), lessThanOrEqualTo(max)));
 
-        generator.parseRule("expression|#double(10.5,12.0,'¥%.2f')");
-        doubleValue = generator.generate();
+        doubleValue = 
generator.generate("expression|#double(10.5,12.0,'¥%.2f')");
         assertThat(Double.valueOf(doubleValue.substring(1)), 
allOf(greaterThanOrEqualTo(min), lessThanOrEqualTo(max)));
         assertThat(doubleValue, matchesRegex("^¥\\d+.\\d{2}$"));
     }
@@ -105,16 +101,14 @@ public class ExpressionGeneratorTest {
     public void testRandomIntGenerate() {
         int min = 10;
         int max = 15;
-        generator.parseRule(String.format("expression|#int(%d,%d)", min, max));
-        String val = generator.generate();
+        String val = 
generator.generate(String.format("expression|#int(%d,%d)", min, max));
         assertThat(Integer.valueOf(val), allOf(greaterThanOrEqualTo(min), 
lessThanOrEqualTo(max)));
     }
 
     @Test
     public void testRandomDataGenerate() {
 
-        generator.parseRule("expression|#oneOf('shenyu','number',1)");
-        String val = generator.generate();
+        String val = 
generator.generate("expression|#oneOf('shenyu','number',1)");
         assertThat(val, oneOf("\"shenyu\"", "\"number\"", "1"));
     }
 
@@ -123,8 +117,7 @@ public class ExpressionGeneratorTest {
 
         int minLength = 10;
         int maxLength = 20;
-        generator.parseRule(String.format("expression|#zh(%d,%d)", minLength, 
maxLength));
-        String val = generator.generate();
+        String val = generator.generate(String.format("expression|#zh(%d,%d)", 
minLength, maxLength));
         assertThat(val.length(), allOf(greaterThanOrEqualTo(minLength), 
lessThanOrEqualTo(maxLength)));
     }
 
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/PhoneGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/PhoneGeneratorTest.java
index 9efb52ce4..1ed10c8c7 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/PhoneGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/PhoneGeneratorTest.java
@@ -17,31 +17,32 @@
 
 package org.apache.shenyu.plugin.mock.generator;
 
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.matchesRegex;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.jupiter.api.Test;
-
 /**
  * The test case for {@link PhoneGenerator }.
  *
  * @date 2022/6/20 14:48
  */
 public final class PhoneGeneratorTest {
-    
+
     private final PhoneGenerator generator = new PhoneGenerator();
-    
+
     @Test
     void testGenerate() {
-        generator.parseRule("phone");
-        String phone = generator.generate();
-        assertTrue(phone.matches("^1[3-9]\\d{9}$"));
+        String phone = generator.generate("phone");
+        assertThat(phone, matchesRegex("^1[3-9]\\d{9}$"));
     }
-    
+
     @Test
     void match() {
         assertTrue(generator.match("phone"));
         assertFalse(generator.match("mobile"));
-        
+
     }
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RandomDoubleGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RandomDoubleGeneratorTest.java
index e64630de4..ed1105bfd 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RandomDoubleGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RandomDoubleGeneratorTest.java
@@ -17,34 +17,32 @@
 
 package org.apache.shenyu.plugin.mock.generator;
 
+import org.junit.jupiter.api.Test;
+
 import static org.junit.jupiter.api.Assertions.assertAll;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.jupiter.api.Test;
-
 /**
  * The test case for {@link RandomDoubleGenerator}.
  */
 public final class RandomDoubleGeneratorTest {
-    
+
     private final RandomDoubleGenerator generator = new 
RandomDoubleGenerator();
-    
+
     @Test
     public void generate() {
-        generator.parseRule("double|10.5-12.0");
-        String doubleValue = generator.generate();
+        String doubleValue = generator.generate("double|10.5-12.0");
         assertNotNull(doubleValue);
-        generator.parseRule("double|10.5-12.0|¥%.2f");
-        String formated = generator.generate();
+        String formated = generator.generate("double|10.5-12.0|¥%.2f");
         assertAll(
             () -> assertNotNull(formated),
             () -> assertTrue(formated.matches("^¥\\d+.\\d{2}$"))
         );
-        
+
     }
-    
+
     @Test
     public void match() {
         assertTrue(generator.match("double|10-15"));
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RandomIntGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RandomIntGeneratorTest.java
index ef1248658..22b3d0bbe 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RandomIntGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RandomIntGeneratorTest.java
@@ -17,27 +17,28 @@
 
 package org.apache.shenyu.plugin.mock.generator;
 
+import org.junit.jupiter.api.Test;
+
+import java.util.Objects;
+
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.jupiter.api.Test;
-
 /**
  * The test case for {@link RandomIntGenerator}.
  */
 public final class RandomIntGeneratorTest {
-    
+
     private final RandomIntGenerator generator = new RandomIntGenerator();
-    
+
     @Test
     public void generate() {
         int min = 10;
         int max = 15;
-        generator.parseRule(String.format("int|%d-%d", min, max));
-        Integer generate = generator.generate();
-        assertTrue(generate != null && generate >= min && generate <= max);
+        Integer generate = generator.generate(String.format("int|%d-%d", min, 
max));
+        assertTrue(Objects.nonNull(generate) && generate >= min && generate <= 
max);
     }
-    
+
     @Test
     public void match() {
         assertTrue(generator.match("int|10-15"));
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RangeDataGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RangeDataGeneratorTest.java
index e39b37bad..6925a16eb 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RangeDataGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/RangeDataGeneratorTest.java
@@ -17,33 +17,32 @@
 
 package org.apache.shenyu.plugin.mock.generator;
 
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import org.junit.jupiter.api.Test;
 
 import java.util.Objects;
-import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * The test case for {@link RangeDataGenerator}.
  */
 public final class RangeDataGeneratorTest {
-    
+
     private final RangeDataGenerator generator = new RangeDataGenerator();
-    
+
     @Test
     public void generate() {
-        generator.parseRule("list|[shenyu,gateway]");
-        String rangeData = generator.generate();
+        String rangeData = generator.generate("list|[shenyu,gateway]");
         assertTrue(Objects.equals("shenyu", rangeData) || 
Objects.equals("gateway", rangeData));
     }
-    
+
     @Test
     public void testListDataContainComma() {
-        generator.parseRule("list|[shen\\,yu,gate\\,way]");
-        String rangeData = generator.generate();
+        String rangeData = generator.generate("list|[shen\\,yu,gate\\,way]");
         assertTrue(Objects.equals("shen,yu", rangeData) || 
Objects.equals("gate,way", rangeData));
     }
-    
+
     @Test
     public void match() {
         assertTrue(generator.match("list|[shen\\,yu,gate\\,way]"));
@@ -51,6 +50,6 @@ public final class RangeDataGeneratorTest {
         assertFalse(generator.match("list|[shenyu,gateway"));
         assertFalse(generator.match("list|[]"));
         assertFalse(generator.match("list|[ ]"));
-        
+
     }
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ZhStringGeneratorTest.java
 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ZhStringGeneratorTest.java
index 45a3478b1..aa91a18ff 100644
--- 
a/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ZhStringGeneratorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-mock/src/test/java/org/apache/shenyu/plugin/mock/generator/ZhStringGeneratorTest.java
@@ -17,30 +17,29 @@
 
 package org.apache.shenyu.plugin.mock.generator;
 
+import org.junit.jupiter.api.Test;
+
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.jupiter.api.Test;
-
 /**
  * The test case for {@link ZhStringGenerator}.
  *
  * @date 2022/6/20 15:44
  */
 public final class ZhStringGeneratorTest {
-    
+
     private final ZhStringGenerator generator = new ZhStringGenerator();
-    
+
     @Test
     public void generate() {
         int minLength = 10;
         int maxLength = 20;
-        generator.parseRule(String.format("zh|%d-%d", minLength, maxLength));
-        String generate = generator.generate();
+        String generate = generator.generate(String.format("zh|%d-%d", 
minLength, maxLength));
         assertTrue(
-            generate != null && generate.length() >= minLength && 
generate.length() <= maxLength);
+                generate != null && generate.length() >= minLength && 
generate.length() <= maxLength);
     }
-    
+
     @Test
     public void match() {
         assertTrue(generator.match("zh|10-15"));


Reply via email to