有 Java 编程相关的问题?

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

java如何使用@InjectMocks注入相同类型的依赖项?

我有一个User类,它有一个具有两个相同类型参数的构造函数

public class User {
    Dependency dependency1;
    Dependency dependency2;
    User(Dependency dependency1,Dependency dependency2){
        this.dependency1=dependency1;
        this.dependency2=dependency2;
    }
    public void test(){
        dependency1.print();
        dependency2.print();
    }
}

在我的测试中,我有两个间谍依赖项,我希望它们像new User(dependency1,dependency2)一样被注入

@ExtendWith(MockitoExtension.class)
public class InjectMocksTest {
    @InjectMocks
    User user;
    @Spy
    Dependency dependency1=new Dependency("dependent1");
    @Spy
    Dependency dependency2=new Dependency("dependent2");
    @Test
    void test(){
        user.test();
    }
}

但是我发现User的dependency1和dependency2都是指测试中的dependency1,就像他们注射了new User(dependency1,dependency1)

那么,如何通过@InjectMocks注释实现我想要的呢


共 (1) 个答案

  1. # 1 楼答案

    如果首先创建对象本身,并将参数设置为null,则可以使用字段注入诱使Mockito注入mock。这对我很有用:

    @ExtendWith(MockitoExtension.class)
    public class UserTest {
      @InjectMocks
      User user = new User(null, null);
    
      @Spy
      Dependency dependency1 = new Dependency("dependent1");
      @Spy
      Dependency dependency2 = new Dependency("dependent2");
    
      @Test
      void test() {
        user.test();
      }
    }
    

    输出:

    dependent1
    dependent2
    

    然而,这种行为没有记录在案,所以我不确定我是否会依赖它