2015-01-21 7 views
5

Sto usando Apache CXF 3.0.0 e ho pochi servizi definiti con la configurazione JAX-RS. Abbiamo una configurazione gerarchica con Spring Framework. Questi input/output di questi servizi sono stringhe JSON.Test unità CXF

Sto cercando un esempio funzionante di casi di test Junit per convalidare i miei servizi. Configurare anche il test in Maven Build.

ho fatto riferimento https://cwiki.apache.org/confluence/display/CXF20DOC/JAXRS+Testing

E 'consigliabile approccio? Tuttavia, ho provato a configurare ma non potevo riuscire, non potevo capire dove va cosa.

risposta

5

Mi piace l'approccio che citi nel tuo collegamento, ma dipende dal tuo set up. mostro come sono riuscito a creare test JUnit per il server cxf utilizzando la configurazione di primavera:

// Normal Spring Junit integration in my case with dbunit 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:/root-test-context.xml", "classpath:/rest-test-context.xml" }) 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DbUnitTestExecutionListener.class }) 
@DatabaseSetup("AuthenticationResourceTest-dataset.xml") 
@DatabaseTearDown("AuthenticationResourceTest-dataset.xml") 
public class AuthenticationResourceTest { 
    // This variable is populated from surfire and reserve port maven plugin 
    @Value("#{systemProperties['basePath'] ?: \"http://localhost:9080/api/\"}") 
    private String basePath; 

    // I assume that you have in your spring context the rest server 
    @Autowired 
    private JAXRSServerFactoryBean serverFactory; 

    private Server server; 

    @Before 
    public void beforeMethod() { 
     serverFactory.setBindingId(JAXRSBindingFactory.JAXRS_BINDING_ID); 
     // Specify where your rest service will be deployed 
     serverFactory.setAddress(basePath); 
     server = serverFactory.create(); 
     server.start(); 
    } 

    @Test 
    public void authenticateTest() throws Exception { 
     // You can test your rest resources here. 
     // Using client factory 
     // AutenticationResourceclient = JAXRSClientFactory.create(basePath, AutenticationResource.class); 
     // Or URLConnection 
     String query = String.format("invitation=%s", URLEncoder.encode(invitation, "UTF-8")); 
     URL url = new URL(endpoint + "/auth?" + query); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     try (InputStream is = connection.getInputStream();) { 
      String line; 
      // read it with BufferedReader 
      BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

      while ((line = br.readLine()) != null) { 
       System.out.println(line); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @After 
    public void afterMethod() { 
     server.stop(); 
     server.destroy(); 
    } 

} 

È necessario avere nel vostro pom.xml Maven

<dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-transports-http-jetty</artifactId> 
     <version>3.0.2</version> 
    </dependency> 

Plugins section: 

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.5</version> 
     <executions> 
      <execution> 
      <id>reserve-network-port</id> 
      <goals> 
       <goal>reserve-network-port</goal> 
      </goals> 
      <phase>process-test-resources</phase> 
      <configuration> 
       <portNames> 
       <portName>test.server.port</portName> 
       </portNames> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.18.1</version> 
     <configuration> 
      <systemPropertyVariables> 
      <basePath>http://localhost:${test.server.port}/api</basePath> 
      </systemPropertyVariables> 
     </configuration> 
     </plugin> 
    </plugins> 

È possibile controllare il mio dal my personal git repository completo esempio:

+0

Grazie mille per la risposta, cercherò di adattare l'approccio nel mio setup e aggiornamento. –