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

Java 如何使用@InjectMocks注入相同类型的依赖项?,java,junit,mockito,Java,Junit,Mockito,我有一个User类,它有一个构造函数和两个相同类型的参数 public class User { Dependency dependency1; Dependency dependency2; User(Dependency dependency1,Dependency dependency2){ this.dependency1=dependency1; this.dependency2=dependency2; } pu

我有一个
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();
    }
}
在我的测试中,我有两个Spy依赖项,我希望它们像
新用户(dependency1,dependency2)
一样被注入

但是我发现
User
的dependency1和dependency2在测试中都指dependency1,就像它们被注入了
新用户(dependency1,dependency1)


那么,如何使用
@InjectMocks
注释实现我想要的呢?

如果首先创建对象本身,并将参数设置为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

但是,这种行为没有文档记录,所以我不确定我是否会依赖它。

为什么使用
@InjectMocks
而不是只调用
new
?@chrylis谨慎的光学-我知道
new
很容易。但是在setter注入方面,@InjectMocks可以通过属性名和mock名的匹配来注入依赖关系,所以我不知道在构造函数注入方面是否有解决方法。这确实是一个解决方法,但我认为并不比使用
new
更好。无论如何,谢谢你的回答。
dependent1
dependent2