Лучший способ протестировать Java-программу

Я хотел протестировать приведенную ниже java-программу.

package com.arrays;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Find all pairs in an array of non-negative unique numbers whose sum is equal to k
 * For Example. {1,3,4,5,6} and k=9, then {3,6} and {4,5}
 *
 */
public class FindAllPairsIfSumToK {

    public List<Pair> findAllPairsWhoseSumIsK(int[] inputArray, int k) {

        Set<Integer> tempSet = new HashSet<>();
        List<Pair> pairs = new ArrayList<>();

        for(int i=0;i<inputArray.length;i++) {
            tempSet.add(inputArray[i]);
        }

        for(int i=0;i<inputArray.length;i++) {
            if ((2*inputArray[i] != k) && tempSet.contains(k-inputArray[i])) {
                pairs.add(new Pair(inputArray[i], k-inputArray[i]));
            }
        }

        return pairs;
    }

    public static void main(String[] args) {

        FindAllPairsIfSumToK findAllPairsIfSumToK = new FindAllPairsIfSumToK();

        //Test 1
        int[] inputArray1 = {1, 3, 5, 7, 9, 11};
        List<Pair> output1 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray1, 10);
        assert (output1.size() == 2) ;

        //Test 2
        int[] inputArray2 = {1, 2, 5, 6, 12, 15, 16};
        List<Pair> output2 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray2, 17);
        assert (output2.size() == 3) ;
    }

    class Pair{
        int value1,value2;

        public Pair(int value1, int value2) {
            this.value1 = value1;
            this.value2 = value2;
        }
    }
}

Вот как я пытаюсь протестировать программу

//Test 1
            int[] inputArray1 = {1, 3, 5, 7, 9, 11};
            List<Pair> output1 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray1, 10);
            assert (output1.size() == 2) ;

Я погуглил, но большинство из них рассказывают о тестировании веб-приложения. Это правильный способ протестировать программу? Или не могли бы вы направить?

Пожалуйста, проверьте dzone.com/articles/junit-tutorial-beginners.

AsthaUndefined 24.08.2018 10:15

Что именно вы искали, чтобы получить информацию о веб-приложениях?

OneCricketeer 24.08.2018 10:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
1 811
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для java существует библиотека модульного тестирования под названием JUnit. В зависимости от вашей среды IDE вам придется включать ее по-разному, но вот основы. Если вы используете JUnit, вы можете написать несколько тестовых примеров, что предпочтительнее, чем тестовый пример в основной функции, поскольку вы можете лучше организовать тесты.

Если вы используете eclipse, чтобы сгенерировать новый JUnit TestCase, просто щелкните правой кнопкой мыши исходную папку и выберите: new -> other -> JUnitTestCase, а затем выберите версию JUnit.

В JUnitTestCase все тесты - это функции, аннотированные с помощью @Test, а результаты проверяются с помощью assertEqals, assertArrayEquals, assertNonNull и т. д. Если вы создаете новую исходную папку (назовите ее test или что-то подобное) и создаете ту же структуру пакета, что и в вашей программе и создавать тесты в том же пакете, что и тестируемый класс, вы можете получить доступ к частным и защищенным членам пакета, но тесты по-прежнему организованы отдельно от основной программы.

Ваш тест с использованием JUnit будет выглядеть так:

@Test
public void Test_FindAllPairsIfSumToK(){
    FindAllPairsIfSumToK findAllPairsIfSumToK = new FindAllPairsIfSumToK();
    int[] inputArray1 = {1, 3, 5, 7, 9, 11};
    List<Pair> output1 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray1, 10);
    assertEquals (2, output1.size());
    //maybe check if the correct ones are output:
    output1.foreach(p -> assertEquals(10, p.value1 + p.value2));
}

Также вы можете объявить переменные в паре как public final int, чтобы к ним можно было получить доступ извне пакета и их нельзя было изменить после создания объекта Pair.

Этот пример можно проверить, запустив вашу программу с переключением -ea или -enableassertions на java.

Единственное, что нужно изменить, - это условия с == на! =, Поскольку assert работает с противоположным условием с выдачей исключения.

Пожалуйста, проверьте: вопрос

Другие вопросы по теме