如何使用弹簧和mockito掌握被测对象的字段



我有一个春季服务类,我正在@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;

相关内容

  • 没有找到相关文章