我有一个春季服务类,我正在@PostConstruct方法下向执行者提交一些任务。我写了很少的测试,但它们的行为在所有运行中都不相同。有时全部通过,有时很少失败,尽管满足条件。
Class A {
Private final ExecutorService executorService = Executors.newCachedThreadPool();
private final Object obj1
private final Object obj2;
@Autowired
public A(Object obj1, Object obj2) {
this.obj1 = obj1;
this.obj2 = obj2;
}
@PostConstruct
public void process() {
executorService.submit(() -> {
obj1.doSomething();
obj2.doOtherthing();
});
}
//Some other methods.....
}
Class ATest {
A a;
@Mock
Object obj1;
@Mock
Object obj2;
@Before
public void setUp() {
a = new A(Obj1, Obj2);
}
@Test
public void processTest {
doNothing.when(obj1.doSomething);
doNothing.when(obj1.doOtherthing);
a.process();
verify(obj1).doSomething();
verify(obj2).doOtherthing();
}
@Test
public void otherTest {
//some test
}
}
因此,我希望在测试类中访问executorService,以便我可以监视测试行为不同的原因。
任何建议或建议都会有所帮助。
你可以
为你executorService
创建一个包私有方法,并在测试中使用它来获取executorService
,但是你的测试类和被测类应该在同一个包中。
ExecutorService getExecutorService() {
return executorService;
}
除此之外,您还可以使用@InjectMocks
注释代替@Before setUp()
。
@InjectMocks
private A a;