Тестирование Junit со случайным числом - PullRequest
0 голосов
/ 26 ноября 2018

Я новичок в тестировании.Я использую netbeans.

У меня есть назначение в колледж для тестирования джунтов, но я не совсем уверен, как мне следует тестировать метод случайных чисел.Мой вопрос заключается в том, как я должен тестировать ниже метод?

/**
     * Method will generate a set of integers between the minimum and maximum of
     * the requested size. If the uniqueElements is true the set will consist of
     * unique integer values
     *
     * @param size the number of elements for the array
     * @param minimum the lower value of the range of integers to generate
     * @param maximum the upper value of the range of integers to generate
     * @param uniqueElements flag for unique values
     * @return
     */
    public static ArrayList<Integer> createSet(int size, int minimum, int maximum, boolean uniqueElements) {
        boolean filled = false;
        int i = 0;
        ArrayList<Integer> arraySet = null;
        if (size > 0) {
            arraySet = new ArrayList<Integer>();
            boolean isUnique = false;
            while (!filled) {
                int randi = (int) (Math.random() * (maximum - minimum)) + minimum;
// C        isu = true;
// C       for (int j = 0; j < i && u; j++) {
// ** NEED &=  isu = randi != A.get(j);
// C       }
//
//        if (isu || !u) {
//          A.add(randi);
//          i++;
//        }
                isUnique = true;
                for (int j = 0; j < i && uniqueElements; j++) {
                    isUnique = randi != arraySet.get(j);
                }

                if (isUnique || !uniqueElements) {
                    arraySet.add(randi);
                    i++;
                }

                filled = (i == size);
            }
        }
        return arraySet;
    }

Для этого задания профессор сказал мне, что покрывает 100% покрытие кода.Я не уверен, как мне это сделать?

Я создал этот тестовый пример

/**
     * Test of createSet method, of class ArraySetUtilities.
     */
    @Test(timeout = 5000)
    public void testCreateSet() {

        System.out.println("createSet");
        int size = 0;
        int minimum = 0;
        int maximum = 0;
        boolean uniqueElements = true;
        ArrayList<Integer> expResult = null;
        ArrayList<Integer> result = ArraySetUtilities.createSet(size, minimum, maximum, uniqueElements);
        assertEquals(expResult, result);

    }

Заранее спасибо

1 Ответ

0 голосов
/ 26 ноября 2018

Как сказал @flopshot, у вас должны быть все покрытия IF.Для этого вам нужно контролировать случайное число, которое генерирует ваш тест.

Чтобы сделать это, я бы порекомендовал вам заменить Math.random () на SingletonRandom и использовать макет фреймворка, такой как JMockit..

Изменение вашего «производственного» кода, чтобы быть тестируемым, - это то, что нужно тщательно продумать, однако, для этого хорош сценарий случайного насмешки.

Вы можете создать интерфейс случайным методоми реализуйте его дважды вопрос обмена стека , или создайте класс SingletonRandom и смоделируйте его в своем тесте.Та же концепция описана здесь mock singleton с jmockit .

public class SingletonRandom {
   private SingletonRandom() {}

    public static SingletonRandom newInstance() {
        return new SingletonRandom();
    }

    public double getRandomNumber() {
        return Math.random();
    }
}

В вашем классе сделайте что-нибудь подобное

int randi = (int) (SingletonRandom.newInstance().random() * (maximum - minimum)) + minimum;

И в тесте Mock the SingletonRandom

ClassTest {
    @Mocked
    SingletonRandom SingletonRandom;

    @Test
    testMethod() {
       new Expectations() {{
           SingletonGenerator.newInstance(); result = singletonGenerator;
           singletonGenerator.getRandomNumber(); result = new double[] { 1.2, 2.5, 3.7 };   // Add the requested "random" numbers for your if casses
       }};

       // Add calls to method with assertion here
    }
}

Подробнее об ожиданиях вы можете прочитать здесь Руководство по ожиданиям JMockit

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