2015-01-21 54 views
5

我正在使用Apache CXF 3.0.0,并且几乎没有使用JAX-RS配置定义的服务。我们使用Spring Framework进行分层配置。这些服务的这些输入/输出是JSON字符串。CXF单元测试

我正在寻找一个Junit测试用例的工作示例来验证我的服务。还要配置Maven Build中的测试。

我提到https://cwiki.apache.org/confluence/display/CXF20DOC/JAXRS+Testing

建议使用这种方法呢?然而,我试图设置,但不能成功,不明白哪里去了。

回答

5

我喜欢你在链接中提到的方法,但它取决于你的设置。 我告诉我如何管理使用Spring配置文件来创建CXF服务器JUnit测试:

// 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(); 
    } 

} 

你需要在你的Maven的pom.xml

<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> 

您可以检查出我从my personal git repository完整例如:

+0

非常感谢您的回答,我会尝试在我的设置和更新中调整方法。 – 2015-01-27 17:45:47