Как получить поля тестируемого объекта с помощью пружины и мокито - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть класс обслуживания Spring, где я отправляю несколько задач Executor с помощью метода @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 в классе тестирования, чтобы я мог отслеживать, что происходит, и почему тесты ведут себя по-разному.

Любые предложения или рекомендации будут полезны.

1 Ответ

0 голосов
/ 30 декабря 2018

Вы можете создать закрытый метод пакета для вашего executorService и использовать его в тесте для получения executorService, однако ваш тестовый класс и тестируемый класс должны находиться в одном пакете.

ExecutorService getExecutorService() {
   return executorService;
}

Помимо этого вы можете использовать @InjectMocks аннотацию вместо @Before setUp().

@InjectMocks
private A a;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...