Mocking a method that uses external classes, mockito

前端 未结 2 1286
野的像风
野的像风 2021-01-22 08:05

I\'m new to mockito and just trying to understand how it works.

I have a method that I want to test. The method instantiates multiple classes to use its methods.

相关标签:
2条回答
  • 2021-01-22 08:36

    My standard solution here is to add a method which instantiates the class:

    public ClassToTest {
        methodToTest{
            class1 c1 = newClass1();
            ...
        }
    
        class1 newClass1() {
            return new Class1();
        }
    }
    

    The new method is protected or package private and I simply override it in my unit test to inject the mocks:

    @Test
    public void testFoo() {
        ClassToTest inst = new ClassToTest() {
            class1 newClass1() {
                return new Class1(); // <--- you can mock here
            }            
        };
    }
    
    0 讨论(0)
  • 2021-01-22 08:47

    Instead of passing different objects of classes to method you could actually mock when new object is created. eg

    Class1 class1 = Mockito.mock(Class1.class);
    PowerMockito.whenNew(Class1.class).withNoArguments().thenReturn(class1);
    

    At the top of the test class write this annotation

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({Class1.class})
    public class Class1Test {
    
    ----------- some code-------
    }
    

    Follow the link https://code.google.com/p/powermock/wiki/MockitoUsage13

    Hope this will solve your problem. Ask in case of query.

    0 讨论(0)
提交回复
热议问题