如何使用JUnit 5对自定义对象作为返回类型的静态方法进行单元测试

hmae6n7t  于 2023-03-30  发布在  其他
关注(0)|答案(2)|浏览(131)
public class Demo{
    public static CustomObject processMethod(String str1, String str2){
        //do something
        Demo1.processMethod1(str1,str2);
        Demo2.processMethod2(str1,str2);
        return custom Object;
    }
}

public class Demo1{
    public static void processMethod1(String str1, String str2){}
}

public class Demo2{
    public static void processMethod2(String str1, String str2){}
}

我是单元测试的新手。在为类Demo processMethod创建测试时,如何跳过processMethod1和processMethod2的执行?

kpbpu008

kpbpu0081#

尝试这样的事情,

@Test
public void testProcessMethod() throws Exception {
   try (MockedStatic<Demo> demoMocked = Mockito.mockStatic(Demo.class)) {
        demoMocked.when((str1, str2) -> Demo.processMethod1(str1, str2)).thenAnswer((Answer<Void>) invocation -> null);
        demoMocked.verify(Mockito.times(1), () -> Demo.processMethod1(Mockito.anyString(), Mockito.anyString()));

        demoMocked.when((str1, str2) -> Demo.processMethod2(str1, str2)).thenAnswer((Answer<Void>) invocation -> null);
        demoMocked.verify(Mockito.times(1), () -> Demo.processMethod2(Mockito.anyString(), Mockito.anyString()));
   }
}
jgwigjjp

jgwigjjp2#

注意,mocks上的void方法默认情况下什么也不做!
你可以使用Mockito框架中的任何doThrow()、doAnswer()、doNothing()、doReturn()方法家族来模拟void方法。
比如说

Mockito.doThrow(new Exception()).when(instance).methodName();

或者如果你想把它和后续行为结合起来,

Mockito.doThrow(new Exception()).doNothing().when(instance).methodName();

或者什么都不做:

Mockito.doNothing().when(spy).methodToMock();

或者你可以调用真实的方法

Mockito.doCallRealMethod().when(<objectInstance>).<method>();
<objectInstance>.<method>();

或者,你可以为该类的所有方法调用真实的方法,这样做:

<Object> <objectInstance> = mock(<Object>.class, Mockito.CALLS_REAL_METHODS);

相关问题