Какая стратегия для построения тестовых данных - PullRequest
3 голосов
/ 07 июня 2011

Я новичок в мире разработки, и мне интересно, какова лучшая стратегия для создания непротиворечивых и согласованных сложных тестовых данных (я имею в виду, что мои POJO сложны для заполнения) для модульного тестирования?о "Тестовом построителе данных", но слишком мало о нем говорят в сети.

1 Ответ

0 голосов
/ 07 июня 2011

Мне часто нужно делать точно такую ​​же задачу. Fuzz-тестирование является подходящим подходом, хотя мы должны быть осторожны, чтобы различать необработанные fuzzers и smart fuzzers.Умный фаззер отличается от обычного инструмента фазз (например, zzuf ) тем, что он генерирует данные, предназначенные для вашего приложения.Очевидно, что в этом случае вам понадобится умный фаззер.

Чтобы написать умный фаззер, вам нужно извлечь те правила, которые представляют «непротиворечивые и связные», и использовать их в качестве логики.Наверное, лучше всего привести пример.Класс Model ниже имеет некоторую логику против него.

class Model {

    // Should always be between 0 and 10
    int a;

    // Children
    List<Model> children;

    // Only true at the root
    boolean isRoot;
}

Мы можем написать для этого построитель тестовых данных, просто кодифицировав эти правила.

class ModelGenerator {
   private Random random;

   // A seed is a good idea; you want your tests to be reproducible
   public ModelGenerator(int seed) {
       random = new Random(seed);
   }

   public Model arbitrary () {
       return generateSingleItem(true);
   }

   private Model generateSingleItem(boolean isRoot) {
       Model model = new Model();
       model.isRoot = isRoot;
       model.a = random.nextInt(10);

       int childrenCount = random.nextInt(100);
       model.children = new ArrayList<Model>(childrenCount);
       for (int i=0;i<childrenCount;++i) {
            model.children.add(generateSingleItem(false));
       }

       return model;
   }
}

Теперь вы можете использоватьГенератор для создания случайных (но предсказуемых благодаря начальным) моделей для проверки утверждений с помощью.

Этот подход очень тесно связан с QuickCheck .Доступна Java-версия , которая обеспечивает общий интерфейс (и даже больше!), Как описано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...