Java 当没有构造函数时,Mockito mock如何连接?

Java 当没有构造函数时,Mockito mock如何连接?,java,mockito,Java,Mockito,我正在经历使用构造函数设置SUT的过程,但我的问题是,如果没有构造函数,例如,如果我们有: @Autowire private PetRepository petRepository; @Autowire private VetRepository vetRepository; @Autowire private OwnerRepository ownerRepository; @Autowire private VisitRepository visitRepository; 在服务/控制器

我正在经历使用构造函数设置SUT的过程,但我的问题是,如果没有构造函数,例如,如果我们有:

@Autowire private PetRepository petRepository;
@Autowire private VetRepository vetRepository;
@Autowire private OwnerRepository ownerRepository;
@Autowire private VisitRepository visitRepository;

在服务/控制器中。如何设置它?

我更喜欢注释setter,而不是类上的属性。例如:

public class SomeClass implements SomeInterface {

   private PetRepository petRepository;
   private VetRepository vetRepository;
   private OwnerRepository ownerRepository;
   private VisitRepository visitRepository;

   ... some methods ...

   @Resource
   public void setPetRepository(PetRepository petRepository) {
        this.petRepository= petRepository;
   }

   @Resource
   public void setVetRepository(VetRepository vetRepository) {
        this.petRepository= vetRepository;
   }

   @Resource
   public void setOwnerRepository(OwnerRepository ownerRepository) {
        this.ownerRepository = ownerRepository;
   }

   @Resource
   public void setVisitRepository(VisitRepository visitRepository) {
        this.visitRepository= visitRepository;
   }

}
@RunWith(MockitoJUnitRunner.class)
public ServiceTest {

    @Mock
    PetRepository petRepository
    // ...omitted mocks ...

    @InjectMocks
    ClinicServiceImpl service;

}
然后,您可以使用Mockito和Junit创建如下测试用例:

public class SomeClassTestCase {

  @Mock 
  private PetRepository petRepository;

  @Mock 
  private VetRepository vetRepository;

  @Mock 
  private OwnerRepository ownerRepository;

  @Mock 
  private VisitRepository visitRepository;

  private SomeClass someClass;

  @Before
  public void before(){
     MockitoAnnotations.initMocks(this);
     someClass = new SomeClass();
     someClass.setPetRepository(petRepository);
     someClass.setVetRepository(vetRepository);
     someClass.setOwnerRepository(ownerRepository);
     someClass.setVisitRepository(visitRepository);
  }

  @Test
  public void someTest() {
    ...
  }

}
希望有帮助。

您可以使用Mockito的注释。这将实例化并注入模拟依赖项,例如:

public class SomeClass implements SomeInterface {

   private PetRepository petRepository;
   private VetRepository vetRepository;
   private OwnerRepository ownerRepository;
   private VisitRepository visitRepository;

   ... some methods ...

   @Resource
   public void setPetRepository(PetRepository petRepository) {
        this.petRepository= petRepository;
   }

   @Resource
   public void setVetRepository(VetRepository vetRepository) {
        this.petRepository= vetRepository;
   }

   @Resource
   public void setOwnerRepository(OwnerRepository ownerRepository) {
        this.ownerRepository = ownerRepository;
   }

   @Resource
   public void setVisitRepository(VisitRepository visitRepository) {
        this.visitRepository= visitRepository;
   }

}
@RunWith(MockitoJUnitRunner.class)
public ServiceTest {

    @Mock
    PetRepository petRepository
    // ...omitted mocks ...

    @InjectMocks
    ClinicServiceImpl service;

}
有关更多使用示例和注意事项,请参阅