mockito 在@injectMock Java上未反射@模拟值

idfiyjo8  于 2022-11-08  发布在  Java
关注(0)|答案(1)|浏览(118)

我是Mockito的新手,我尝试为nstead适配器编写单元测试,假设我们有3个类,最后一个类将更新Map,将其返回到中间层,然后再次返回到最终层

List<Map<Integer, List<String>> x
Class A {
    Public void method1(List<Map<Integer, List<String>> x) {
                    method2(x)
    }
    private void method2 (List<Map<Integer, List<String>> x) {
                    x.add(...)
    }
}

Class B {
     A a;
    Public int methodB(List<Map<Integer, List<String>> x) {
                    a.method1(x)
                    return x.length;
    }
}

Class C {
     B b;
    Public void methodC(List<Map<Integer, List<String>> x) {
                    int size = b.methodB(x)
    }
}

现在,当我想为C类编写一个单元测试时,我这样做

Public Class cTest {

List<Map<Integer, List<String>> x;
@InjectMocks
C c;

@Mock
B b;

@Test
Public Void test() {

   when(b.methodB(x)).thenReturn(1);
      c.methodC(x)
    }
}

问题是,当我在单元测试中调试对c.methodC(x)的调用时,我检查了x,它总是空的,那么在这种情况下,我如何填充它呢?

ffscu2ro

ffscu2ro1#

public Class cTest {

需要声明Mockito扩展:

@ExtendWith({ MockitoExtension.class })
class cTest {

您需要在类路径中使用扩展名。

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>

参考:https://www.baeldung.com/mockito-junit-5-extension

相关问题