Search code examples
unit-testingjunitmockitojunit4powermockito

Mock class object as parameter of function


I am using junit and mokito to write unit test of my java program.

public MyClass {
    private ClassA a;
    public void process(ClassB b) {
        if(b.method()) a = ClassA.builder().build();

    }
}

Now I have write a MockClassA and MockClassB. But I don't know how to :

  1. Pass a MockClassB instantiation to process function

  2. How to verify whether private variable a is set successfully

Can anybody help?


Solution

  • You can use something like:

    @Test
    public void shouldDoSomething() {
        // given
        ClassB mock = Mockito.mock(ClassB.class);
        Mockito.when(mock.method()).thenReturn(true);
        MyClass classUnderTest = new MyClass();
    
        // when
        classUnderTest.process(mock);
    
        // then
        // Insert assertions
    
    }
    

    However, if your field is private you are unable to test it properly. You should provide a getter for this field if you want to make some assertions against it.

    But remember that internal representation of MyClass should not be tested, only the behavior of it so maybe you want to try different approach