有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java只模拟动作链中的特定类

我正在尝试用spring java编写测试

我上的课

public class A {

    @Autowired
    private B b;

    public void handle() {
        int xyz = b.call();
    }
}

public class B {

    @Autowired
    private C c;

    public int call() {
        // Do something else here as well.
        return c.callC();
    }
}
public class C {

    @Autowired
    private D d;

    public int callC() {
        //do something with d
        return 123;
    }
}

我想给B类打电话,但想模拟C的反应。 不知道这是否可能

我的测试

@SpringBootTest
@RunWith(SpringRunner.class)
public class TestA {

    @Autowired
    private A a;

    @Mock
    private B b

    @Mock
    private C c

    @Test
    public void mytest() {
        when(c.callC()).thenReturn(1);
        A.handle();
        verify(c, times(1)).callC();
    }
}

但它实际上仍然在调用C类,而不是嘲笑它。 任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    你的注解错了。 如果要使用SpringRunner/SpringExtension:

    • 在要模拟的服务上使用@MockBean
    • 使用@Autowired注入使用它们的服务

    另一种方法是使用Mockito runner和@Mock/@InjectMocks

    Difference between @Mock, @MockBean and Mockito.mock()