Можно ли занести в черный список определенные возвращаемые значения в Mockito? - PullRequest
0 голосов
/ 12 сентября 2018

Фон

Я пытаюсь протестировать этот метод в классе с помощью Mockito:

Первый случай метода - когда строка равна константе.

Второй случай метода - когда строка равна чему-либо еще , за исключением константы.

Это строковая версия этого вопроса о всем, кроме определенного целого числа .

public class Class {
    private SomeOtherObjectWithAMethod someOtherObjectWithAMethod;

    public Class(SomeOtherObjectWithAMethod someOtherObjectWithAMethod){
        this.someOtherObjectWithAMethod = someOtherObjectWithAMethod;
    }

    public void method(){
        if(helperObject.obtainAString().equals(HelperObject.A_STRING_CONSTANT)){
            someOtherObjectWithAMethod.thisMethod("stringarg");
        }
        else{
            someOtherObjectWithAMethod.thisMethod("differentarg");
        }
    }

Я знаю, что в Мокито вы можете

  1. Изменить некоторые возвращаемые значения в mockito (но будет влиять только последнее) в соответствии с durron597

  2. Введите null в методе thenReturn() как средство возврата ничего.

  3. Используйте anyString() в качестве фиктивной строки.
  4. Возвращает логическое значение.

Частичное решение

Я уже тестировал первый случай (str.equals("This string")), как написано ниже:

private Class instantiatedClass;

@Test
public void testMethod_thisString(){
    whenever(helperObject.obtainAString()).thenReturn(HelperObject.A_STRING_CONSTANT);
    instantiatedClass.method()
    verify(someOtherObjectWithAMethod).thisMethod("stringarg");
}

Я собираюсь написать другой метод теста, подобный этому. Ниже я прокомментировал ту часть, в которой мне нужна помощь:

@Test
public void testMethod_notThisString(){
    whenever(helperObject.obtainAString()).thenReturn(/* A String that is not HelperObject.A_STRING_CONSTANT */);
    instantiatedClass.method()
    verify(someOtherObjectWithAMethod).thisMethod("differentarg");
}

Вопрос

Как проверить любую строку , кроме для определенного значения (или значений)?

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Вы можете сделать Mockito.doAnswer( answer ), чтобы иметь больше контроля над созданным String

Так что-то вроде:

List<String> blacklist = Arrays.asList("aaaa","bbbb");
Mockito.doAnswer((i)-> { 
    String x=RandomStringUtils.random(4);
    while(blacklist.contains(x)){
        x=RandomStringUtils.random(4);
    }
    return x;
}).when(helperObject).obtainAsString();
0 голосов
/ 13 сентября 2018

Хотя я не знаю, как сделать «любую строку, кроме определенных», это решило мою проблему:

@Test
public void testMethod_notThisString(){
    whenever(helperObject.obtainAString()).thenReturn(HelperObject.CONSTANT1, HelperObject.CONSTANT2, HelperObject.CONSTANT3);
    instantiatedClass.method()
    verify(someOtherObjectWithAMethod).thisMethod("differentarg");
}

Это соответствует логике Overriding Stubbing .

0 голосов
/ 12 сентября 2018

Вы можете искать creating random strings и использовать их, если они не равны определенному значению (значениям).

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