Насмешка над отражающим набором имени в мокито - PullRequest
0 голосов
/ 30 августа 2018

Попытка сделать реальный вызов, чтобы добавить метод через калькулятор.

@Component
public class Calculator {

    @Autowired
    private Operations operations;

    public int calResults(int a, int b){
        int num = operations.opertaionMethod(a, b);
        return num  ;
    }
}

@Component
public class Operations {
@Autowired
private Subtraction sub;

@Autowired
private Addition add;

public int opertaionMethod(int a, int b){
    int num = 0;
    num = sub.subt(a, b);
    num = add.add(a, b); 
    return num;
}


}


@Component
public class Subtraction {


    public int subt(int a, int b){
        return a-b;
    }
}


@Component
public class Addition {


    public int add( int a , int b){
        return a+b;
    }
}


Junit:

@RunWith(MockitoJUnitRunner.class)
public class CalculatorTest {

    @InjectMocks
    private Calculator cal;

    @Spy
    private Operations op;

    @Mock
    private Addition add;

    @Mock
    private Subtraction sub;


    @Test
    public void test() {
        ReflectionTestUtils.setField(op, "add", add);
        ReflectionTestUtils.setField(op, "sub", sub);
        Mockito.when(sub.subt(3, 1)).thenReturn(9);
        int n = cal.calResults(3, 5);
    }

}

Я пытаюсь проверить метод add в классе Add, я хочу сделать реальный вызов вместо макета. в то время как к югу от метода я хочу сделать ложный вызов. Используя рефлексивное, я смог установить поля в классе операций, но без Mockito.when для подобъекта это сделало реальный вызов, который я не хочу. При использовании Mockito в sub я получаю ненужную ошибку заглушки при выполнении юнит-теста. Может кто-нибудь, пожалуйста, помогите мне?

1 Ответ

0 голосов
/ 30 августа 2018

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

public void test() {
    assertEqual(new Addition().add(2, 3), 5)
}

Если вы хотите проверить класс операций, я бы предложил использовать гораздо более простую технику инжекции в конструктор вместо mockito:

public void test() {
    Addition addition = new Addition();
    Subtraction subtraction = new Subtraction();
    Operations ops = new Operations(addition, subtraction);

    assertEqual(ops.operationMethod(2, 3), 5);
}

Та же идея применима к классу калькуляторов:

public void test() {
    Addition addition = new Addition();
    Subtraction subtraction = new Subtraction();

    Operations ops = new Operations(addition, subtraction);
    Calculator calculator = new Calculator(ops);

    assertEqual(calculator.calResults(2, 3), 5);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...