Java 当没有构造函数时,Mockito mock如何连接?
我正在经历使用构造函数设置SUT的过程,但我的问题是,如果没有构造函数,例如,如果我们有:Java 当没有构造函数时,Mockito mock如何连接?,java,mockito,Java,Mockito,我正在经历使用构造函数设置SUT的过程,但我的问题是,如果没有构造函数,例如,如果我们有: @Autowire private PetRepository petRepository; @Autowire private VetRepository vetRepository; @Autowire private OwnerRepository ownerRepository; @Autowire private VisitRepository visitRepository; 在服务/控制器
@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;
}
有关更多使用示例和注意事项,请参阅