繁体   English   中英

如何模拟 Java 中的方法进行测试

[英]How to mock a method in Java for testing

我有一个methodB A,它有一个方法 A 在methodA B 中调用方法 B。

在class B方法B在methodC methodB调用方法C。

Class C 实现methodC

我正在尝试使用 junit、mockito 测试methodA A 中的方法 A。

@ExtendWith(MockitoExtension.class)
public class ClassATest {

    @Mock
    APIGatewayProxyRequestEvent event;

    @Mock
    Context context;

    @Spy
    @InjectMocks
    ClassB classB;

    @Spy
    @InjectMocks
    ClassA classA;

    @Test
    @DisplayName("everything should pass")
    public void testMethodA() throws Exception {
 
        Person p = new Person("xyz", "abc", 12345, true);
        when(classB.methodB(any(Molecule.class), eq("abc"), eq(12345), eq(null))).thenReturn(p);


        Map<String, String> headerMap = new HashMap<>();
        headerMap.put("id", "12345");
        when(event.getHeaders()).thenReturn(headerMap);
        when(event.getBody()).thenReturn("{name:hello}");
        assertEquals(classA.methodA(event, context).getStatusCode(), 500);
 
    }

我收到 null pointer exception for class C methodC的错误。 我也需要嘲笑它吗? 有没有一种方法可以模拟methodB以便测试确实回复methodB中的实现? 由于我的目标是测试methodA ,我可以使用 mocking 其他方法。

你不是 mocking ClassB ,你正在使用真正的实现:

@Spy
@InjectMocks
ClassB classB;

如果你想模拟它,你需要删除这两个注释并使用@Mock代替:

@Mock
ClassB classB;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM