[英]How can Mockito mocks be wired when there is no constructor?
I was going through this tutorial which sets up the SUT using a constructor but my question is what if there is no constructor eg if we have: 我正在阅读本教程 , 该教程使用构造函数设置SUT,但是我的问题是,如果没有构造函数,例如,如果我们有:
@Autowire private PetRepository petRepository;
@Autowire private VetRepository vetRepository;
@Autowire private OwnerRepository ownerRepository;
@Autowire private VisitRepository visitRepository;
in the service/controller. 在服务/控制器中。 How we can set this up?
我们该如何设置?
I prefer to annotate the setters instead of the attributes on the classes. 我更喜欢注释设置器而不是类的属性。 For example:
例如:
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;
}
}
Then you can create a test case like this with Mockito and Junit: 然后,您可以使用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() {
...
}
}
Hope it helps. 希望能帮助到你。
You can use Mockito's @InjectMocks
annotation. 您可以使用Mockito的
@InjectMocks
批注。 This will instantiate and then inject the Mock dependencies, for example: 这将实例化然后注入Mock依赖项,例如:
@RunWith(MockitoJUnitRunner.class)
public ServiceTest {
@Mock
PetRepository petRepository
// ...omitted mocks ...
@InjectMocks
ClinicServiceImpl service;
}
See the documentation for further usage examples and caveats. 有关更多用法示例和注意事项,请参阅文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.