Come testare il servizio web

2

Voglio testare il mio servizio web / metodo web non usando SOAP ma con Junit o altri framework. La prima soluzione che ho fondato è quella di creare uno stub del mio progetto e utilizzare un client per chiamare questo metodo; ma quello che voglio fare è non usare un client, ma chiamare direttamente il mio webmethod all'interno del mio progetto; Sto usando Maven e il progetto è su Jenkins, quindi con Jenkins voglio testare il mio metodo di prova. Ho provato questo per chiamare un webmethod:

private Report reportBean = new Report();
@Mock
HttpSession mockedSession = mock(HttpSession.class);
@Before
public void injectMockEntityManager(){
    EntityManager entityManager = mock(EntityManager.class);
    reportBean.emReport = entityManager;
    Functions fnct= mock(Functions.class);
    reportBean.fnct=fnct;
}

@Test
public void testReport() throws WSException {
    reportBean.getReport("myReport", new Date(), new Date());
TimeUnit.SECONDS.toMillis(1));
}

La classe Report and Functions è @Stateless, e nel Report I uso @EJB per chiamare la classe functions, quello che ho visto è ogni volta che chiamo un metodo che è in un EJB come functions.getElement return null, quindi lì è un'alternativa per chiamare il metodo web senza usare un client come ho spiegato all'inizio o no? grazie

    
posta Liz Lamperouge 18.04.2017 - 10:31
fonte

1 risposta

1

Puoi testare il tuo "Report" rendendolo indipendente dal webservice attraverso un'interfaccia java come questa:

public interface ReportApi {
    void getReport(String templateName, Date orderDate, Date printDate);
}

// webservice independant implementation of ReportApi
public ReportImpl implements ReportApi {
    public void getReport(String templateName, Date orderDate, Date printDate) {
        // ... generate report
    }
}   

// thin WebService wrapper around some ReportApi implementation run on the webserver
public ReportWebService extends SomeWebServiceBaseClass implements ReportApi {
    private ReportApi reportImplementation;
    public ReportWebService (String serviceUrl, ReportApi reportImplementation) {
        ...
        this.reportImplementation = reportImplementation;
    }
    public void getReport(String templateName, Date orderDate, Date printDate)  {
        this.reportImplementation.getReport(templateName, orderDate, printDate);
    }
}

// thin wrapper for WebService-client used by the client to call the WebService functionality
public ReportWebServiceWrapper extends SomeWebServiceBaseClass implements ReportApi {
    ...
}

Tutto quello che il consumatore del rapporto deve sapere è l'interfaccia ReportApi.

Per i test di integrazione puoi utilizzare direttamente new ReportImpl() anziché new ReportWebServiceWrapper() .

    
risposta data 18.04.2017 - 15:10
fonte

Leggi altre domande sui tag