Тестирование методом случайной соли - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь выяснить, как я могу протестировать этот метод с помощью JUnit. Этот метод создает случайную соль длины = x

public static String getSalt(int length) {
    StringBuilder returnValue = new StringBuilder(length);
    for (int i = 0; i < length; i++) { 
        returnValue.append(ALPHABET.charAt(SECURE.nextInt(ALPHABET.length())));
    }
    return new String(returnValue);
}

Я могу проверить, соответствует ли длина вывода целому числу, которым я подпитываю метод, но меня интересует, как мне проверить случайность или это то, что мне не нужно делать?

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

Вы можете проверить, соответствует ли продукция String регулярному выражению алфавита c с длиной = X ниже фрагмента, который вы можете использовать или вдохновить:

Assert.assertTrue(producedString.matches("^[A-Za-z]{X}$")

regex - это ^[A-Za-z]{X}$ с X - длина строки

1 голос
/ 12 апреля 2020

Вы не можете проверить случайность или даже если это требование, оно должно выходить за рамки (его сложность намного больше, чем фактический метод, который тестируется).

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

0 голосов
/ 13 апреля 2020

Если вы насмехаетесь над тем, что есть SECURE, то можно проверить что-то вроде этого:

public static String getSalt(Secure secure, int length) {
        StringBuilder returnValue = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            returnValue.append(ALPHABET.charAt(secure.nextInt(ALPHABET.length())));
        }
        return new String(returnValue);
    }

тогда:

@Mock 
Secure secure;

@Test
public void testSalt() {
    // arrange
    when(secure.nextInt(any()).thenReturn(0);

    // act
    String salted = getSalt(secure, 3);

    // assert
    assertEquals(salted, "AAA");
}

Это просто показывает, как stati c - это смерть для тестируемости , и как следование хорошей OOP практике, такой как передача зависимостей через конструкторы, может помочь в тестировании.

...