2017-12-08 6 views
1

Ich versuche, einen Feder Batch-Job zu testen, die eine Lese führt (Abrufen von Daten aus einer anderen Anwendung) Verfahren (einfache Berechnung) und schreibt (in die mongodb)Testing Frühjahr Batch-Job stepScope

die Leser @ StepScope

Hier ist das postConstruct der Leseaufgabe.

@PostConstruct 
    public void init(){ 
     employees.addAll(getListOfEmployeesBy(affectationMotifService.findAllRegistrationNumbers())); 
    } 

    public List<EmployeeForSalaryDTO> getListOfEmployeesBy(List<String> registrationNumbers){ 
     LOG.debug("request to get all the employees by registration numbers {}" , registrationNumbers); 
     return coreResourceFeign.getAllEmployeesForSalaryByRegistrationNumbers(registrationNumbers).getBody(); 
    } 

Wenn ich versuche, den Test des Auftrags oder was auch immer Test in der Anwendung zu starten. spring führt immer die init() der Leseaufgabe aus, die den Test nicht besteht, weil ich die coreResourceFeign.getAllEmployeesForSalaryByRegistrationNumbers (registrationNumbers) überspielen muss. Ich kann die Methode nicht verspotten, weil sie vor dem Testbeginn ausgeführt wird.

hier ist der Test

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = {SalaryApp.class, SecurityBeanOverrideConfiguration.class}) 
public class SalaryJobServiceTest { 
    @Autowired 
    @InjectMocks 
    private SalaryJobService salaryJobService; 

    @Test 
    public void startJob() throws Exception { 
     SalaryJobDTO SalaryJobDTO = salaryJobService.start(Collections.emptyList()); 
     Assert.assertNotNull(salaryJobDTO.getId()); 
    } 
} 

Ich habe keine Ahnung, wie man mit Frühling Batch-Tests befassen. Jede Empfehlung oder Hilfe wird begrüßt.

Antwort

0

@PostConstruct stellt sicher, dass Ihre Methode sofort aufgerufen wird, nachdem das Objekt erstellt wurde. Die Spring-Anwendung erstellt alle Beans gemäß den Konfigurationen beim Start der Anwendung. Dies ist das erwartete Verhalten. Wenn Sie Ihre Methode nicht während des Startvorgangs der Anwendung aufrufen möchten, entfernen Sie @PostConstruct, und Sie können Ihren Test ausführen, um die abhängigen Objekte zu verspotten.

Eher sollten Sie Leser Methode lesen verwenden, um Ihre Daten in den Leser zu laden.