我正在经历使用构造函数设置SUT的this tutorial,但我的问题是如果没有构造函数,例如如果我们有:
@Autowire private PetRepository petRepository;
@Autowire private VetRepository vetRepository;
@Autowire private OwnerRepository ownerRepository;
@Autowire private VisitRepository visitRepository;
在服务/控制器中。我们如何设置它?
答案 0 :(得分:0)
我更喜欢注释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;
}
}
然后你可以使用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() {
...
}
}
希望它有所帮助。
答案 1 :(得分:0)
您可以使用Mockito的@InjectMocks
注释。这将实例化然后注入Mock依赖项,例如:
@RunWith(MockitoJUnitRunner.class)
public ServiceTest {
@Mock
PetRepository petRepository
// ...omitted mocks ...
@InjectMocks
ClinicServiceImpl service;
}
有关更多用法示例和注意事项,请参阅documentation。