user3006279
user3006279

Reputation: 115

Checking passed params in unit testing with Mockito

I am trying to write really simple test with Mockito. I wrote small piece of code:

public class FlowTests {

    @Mock
    Calculator mockCalc = Mockito.mock(Calculator.class);
    ConsoleView mockView = Mockito.mock(ConsoleView.class);

    @Test
    public void a01_Test() {

        final String s = "2+2*2";

        Controller c = new Controller();
        c.setCalc(mockCalc);
        Mockito.when(mockView.getFormule()).thenReturn(s); // I am not sure if it works
        c.setView(mockView);
        c.handle();
        // TODO check if evaluate method has been invoked with "2+2*2"
    }
}

Here you can see classes associated with this test:

public class Controller {

    private IView view = new ConsoleView();
    private ICalculator calc = new Calculator();
    Double value = null;

    public void handle() {

        String formule = view.getFormule();
        Double value = calc.evaluate(formule);

        if (value != null) {
            System.out.println("Result: ");
            view.appendAnswer(value);
        }
    }

    public void setCalc(ICalculator calc) {
        this.calc = calc;
    }

    public void setView(IView view) {
        this.view = view;
    }
}


public class Calculator implements ICalculator {

    public double evaluate(String s) {

        ...

        char[] formuleChar = s.toCharArray();
        result = calc.eval(formuleChar);

        return result;
    }

}

public class ConsoleView implements IView {

    public String getFormule() {
        ... // getting s from console
        return s;
    }

    public void appendAnswer(double r) {
        System.out.println(r);
    }
}

First goal of my test is to mock function getFormule() in ConsoleView to return always String s = "2+2*2". I did it but I am not sure if it works.

The main goal is to check if method evaluate() in Calculator class has been invoked with the same String. I have no idea how to that.

I cannot modify my code. I can only write a test.

Thank you in advance for your help!

Upvotes: 1

Views: 225

Answers (1)

Ivan Mushketyk
Ivan Mushketyk

Reputation: 8305

Try something like this:

// check if evaluate method has been invoked with "2+2*2"
verify(mockCalc).evaluate("2+2*2");

Upvotes: 3

Related Questions