2013-02-04 64 views
0

我試圖讓我的web服務測試。這個web服務使用ejb和jpa來檢索它的數據。所以我想用這個arquillian擴展來完成這件事。arquillian持久性擴展不起作用

這是我的Arquillian測試類:

@RunWith(Arquillian.class) 
public class PersonWebServiceIT { 

    private PersonWebService service; 

    @Deployment(testable = false) 
    public static Archive<?> createDeployment() { 
     return ShrinkWrap 
       .create(ZipImporter.class, "test.ear") 
       .importFrom(new File("simple-webservice-ear-1.0.0-SNAPSHOT.ear")) 
       .as(EnterpriseArchive.class); 
    } 

    @Test 
    @UsingDataSet("dataset.yml") 
    @SneakyThrows 
    public void testFindPersons(@ArquillianResource final URL deploymentUrl) { 
     loadService(deploymentUrl); 

     Assert.assertEquals(2, service.findPersons().size()); 
    } 

    private void loadService(final URL deploymentUrl) 
     //load webservice 
    } 

} 

這是我的數據集/ dataset.yml文件:

person: 
    - id: 1 
    firstName: "stijn" 
    - id: 2 
    firstName: "cremers" 

我arquillian.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<arquillian xmlns="http://jboss.com/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation=" 
    http://jboss.org/schema/arquillian 
    http://jboss.org/schema/arquillian/arquillian-1.0.xsd"> 

<extension qualifier="persistence"> 
     <property name="defaultDataSource">java:/DefaultDS</property> 
    </extension> 

</arquillian> 

我的測試數據永遠不會被加載。我甚至嘗試了格式錯誤的yml文件,但即使如此我也沒有錯誤。

回答

0

問題出在您的測試運行模式。當您使用屬性testable=false定義@Deployment時,所有測試均以客戶端模式運行,即它們不在容器中運行。

Arquillian持久性擴展(從1.0.0.Alpha5開始)不支持在客戶端模式下運行測試;目前只支持容器內測試。在APE中支持客戶端模式測試可能會在未來發布。

+0

當我設置可檢驗爲真,以指定JDBC URL替代數據源名稱,我得到PersonWebServiceIT的了java.lang.ClassNotFoundException,因爲測試類未包含在部署中。我怎樣才能解決這個問題?我真的很想使用我在生產中使用的耳朵,以確保我的集成測試具有相同的依賴關係。 – cremersstijn

+0

我已經問過這個問題的一個新問題:http://stackoverflow.com/questions/14713129/how-to-add-test-classes-to-an-imported-ear-file-and-run-server-side -with-arquill – cremersstijn

0
<property name="defaultDataSource">java:/DefaultDS</property> 

U're指定在服務器中定義的數據源。

在客戶端模式,測試用例的容器(即其他JVM)

因此,只有持續擴展外運行不能使用數據源的,因此你不能使用的Arquillian持續擴展客戶端模式。

如果在反正arquillian.xml file.Then U可以使用的持久性擴展