2017-04-26 49 views
0

我正在嘗試生成Pact文件。當Eclipse中的「Run As-Junit Test」運行時,測試正在通過。但是,無法真正理解爲什麼沒有生成契約合同文件。你能幫忙嗎?下面是我的測試代碼:Pact文件沒有生成儘管測試通過

package pact; 
import au.com.dius.pact.consumer.*; 
import au.com.dius.pact.consumer.dsl.DslPart; 
import au.com.dius.pact.consumer.dsl.PactDslJsonBody; 
import au.com.dius.pact.model.PactFragment; 
import org.junit.Assert; 
import au.com.dius.pact.consumer.dsl.PactDslWithProvider; 
import au.com.dius.pact.consumer.dsl.PactDslWithState; 

import org.junit.Rule; 
import org.junit.Test; 
import utils.Configuration; 

import java.io.IOException; 

import static org.junit.Assert.assertEquals; 

public class GetHelloWorldTest 
{ 

    @Rule 
    public PactProviderRule rule = new PactProviderRule("PP Provider", "localhost", 9000, this); 
    private String helloWorldResults; 

    @Pact(provider = Configuration.DUMMY_PROVIDER,consumer = Configuration.DUMMY_CONSUMER) 
    public PactFragment createFragment(PactDslWithProvider builder)//TODO 
    { 

     return builder 
       .uponReceiving("get hello world response") 
       .path("/hello-world") 
       .method("GET") 
       .willRespondWith() 
       .status(200) 
       .body("{\"id\":2,\"content\":\"Hello, Stranger!\"}") 
       .toFragment(); 
    } 

    @Test 
    @PactVerification(value = "PP provider") 
    public void shouldGetHelloWorld() throws IOException 
    { 
     DummyConsumer restClient = new DummyConsumer(Configuration.SERVICE_URL); 
     Assert.assertEquals("{\"id\":32,\"content\":\"Hello, Stranger!\"}",restClient.getHelloWorld()); 
     } 

} 

我的POM文件是如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>consumer</groupId> 
    <artifactId>consumer</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

<dependencies> 


    <dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-plugin-api</artifactId> 
    <version>3.3.9</version> 
</dependency> 


<dependency> 
    <groupId>org.apache.maven.reporting</groupId> 
    <artifactId>maven-reporting-impl</artifactId> 
    <version>2.2</version> 
</dependency> 

<dependency> 
    <groupId>commons-cli</groupId> 
    <artifactId>commons-cli</artifactId> 
    <version>1.4</version> 
</dependency> 


<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>fluent-hc</artifactId> 
    <version>4.5.2</version> 
</dependency> 

<dependency> 
    <groupId>org.codehaus.plexus</groupId> 
    <artifactId>plexus-utils</artifactId> 
    <version>3.0.24</version> 
</dependency> 

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.8</version> 
</dependency> 

<dependency> 
    <groupId>au.com.dius</groupId> 
    <artifactId>pact-jvm-consumer-junit_2.10</artifactId> 
    <version>2.4.18</version> 
</dependency> 


<dependency> 
    <groupId>org.codehaus.groovy</groupId> 
    <artifactId>groovy-all</artifactId> 
    <version>2.4.7</version> 
</dependency> 
<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
    <version>1.0.13</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.25</version> 
</dependency> 


</dependencies> 
<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.18</version> 
     <configuration> 
      <systemPropertyVariables> 
      <pact.rootDir>PPPPP/pact</pact.rootDir> 
      <buildDirectory>${project.build.directory}</buildDirectory> 
      </systemPropertyVariables> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 



</project> 
+0

。任何幫助將非常感激。我嘗試了很多我仍然堅持的事情。 – PaChSu

回答

0

這似乎是你缺少你的國家規格在createFragment功能。

要修復它在你的榜樣,改變你的功能,這一點:

@Pact(state = "PP provider", provider = Configuration.DUMMY_PROVIDER,consumer = Configuration.DUMMY_CONSUMER) 
public PactFragment createFragment(PactDslWithProvider builder) 

從這裏,驗證過程就知道了檢查,因爲名字的那種狀態,驗證它,然後寫入條約文件在pacts目錄下,這是默認的。

下面是對我工作的例子:我想在我的組織介紹條約

package pact; 

import au.com.dius.pact.consumer.*; 
import au.com.dius.pact.model.PactFragment; 
import org.junit.Rule; 
import org.junit.Test; 
import utils.Configuration; 

import java.io.IOException; 

import static org.junit.Assert.assertEquals; 

public class GetHelloWorldTest 
{ 
    @Rule 
    public PactRule rule = new PactRule(Configuration.MOCK_HOST, Configuration.MOCK_HOST_PORT, this); 
    private DslPart helloWorldResults; 

    @Pact(state = "HELLO WORLD", provider = Configuration.DUMMY_PROVIDER, consumer = Configuration.DUMMY_CONSUMER) 
    public PactFragment createFragment(ConsumerPactBuilder.PactDslWithProvider.PactDslWithState builder) 
    { 
     helloWorldResults = new PactDslJsonBody() 
       .id() 
       .stringType("content") 
       .asBody(); 

     return builder 
       .uponReceiving("get hello world response") 
       .path("/hello-world") 
       .method("GET") 
       .willRespondWith() 
       .status(200) 
       .headers(Configuration.getHeaders()) 
       .body(helloWorldResults) 
       .toFragment(); 
    } 

    @Test 
    @PactVerification("HELLO WORLD") 
    public void shouldGetHelloWorld() throws IOException 
    { 
     DummyConsumer restClient = new DummyConsumer(Configuration.SERVICE_URL); 
     assertEquals(helloWorldResults.toString(), restClient.getHelloWorld()); 
    } 
} 
+0

嗨,但如果我包含狀態,它顯示爲已棄用。 – PaChSu

+0

即使我添加狀態,pact文件仍然沒有生成。請幫忙:'( – PaChSu

+0

這是一個Maven項目,我相信這個協議文件是在Maven-> install或build命令之後生成的?構建成功,但沒有生成協議文件 – PaChSu

相關問題