Mock eine Autowired ExecutorService

Abstract:

Habe ich eine Feder @Component verwendet autowired ExecutorService als Arbeit-pool. Ich bin mit JUnit und Mockito zum testen der Funktionalität der Komponente und ich müssen zu verspotten, die Executor Service. Dies wurde trivial für andere autowired Mitglieder - ein allgemeiner Helfer, und einer DAO-Schicht zum Beispiel sind leicht zu spotten, aber ich brauche eine real Executor Service.

Code:

@RunWith(MockitoJUnitRunner.class)
public class MadeUpClassNameTest{

  @Mock
  private ExecutorService executor;

  @Before
  public void initExecutor() throws Exception{
      executor = Executors.newFixedThreadPool(2);
  }

  @InjectMocks
  private ASDF componentBeingAutowired;
...

Dies allein nicht funktioniert, die Ergebnisse invokeAll() wird immer nur eine leere Liste.

Versuch mehr explizit mock-executor-Methode auch nicht funktioniert...

@Test
public void myTestMethod(){
    when(executor.invokeAll(anyCollection()))
        .thenCallRealMethod();
    ...
}

Bekomme ich die kryptisch formulierten Ausnahme:

Können Sie nicht verwenden, argument-Matcher außerhalb der Verifizierung oder Lunte.

(Ich dachte, das war eine Lunte ?)

Ich könnte bieten eine thenReturn(Answer<>) Methode, aber ich möchte sicherstellen, dass der code tatsächlich funktioniert, mit ein Testamentsvollstrecker, ein gutes Stück des Kodex widmet sich der Zuordnung der Ergebnisse von Futures.

Problem
Wie erstelle ich ein real (oder funktional nutzbare mock) Executor-Service ? Alternativ ist meine Schwierigkeit bei der Prüfung dieser Komponente ist ein Zeichen, dass dies ein schlechtes design in der Notwendigkeit von refactoring, oder möglicherweise einen schlechten test-Szenario ?

Hinweise
Ich möchte betonen, dass mein problem NICHT immer oder Junit Mockito eingerichtet. Andere verhöhnt und tests ordnungsgemäß funktionieren. Mein problem ist spezifisch nur auf den jeweiligen mock oben.

Mit: Junit 4.12, Mockito 1.10.19, Hamcrest 1.3

InformationsquelleAutor JHarnach | 2015-12-04
Schreibe einen Kommentar