2017-09-12 44 views
0

我有一个项目,我们正在使用邮件提供程序,因为它涉及基于Apache kafka的邮件。协定验证不工作 - 在邮件提供商测试期间未找到注释的方法

消费者方面的maven目标从本地以及Jenkins都能正常工作。

提供者端契约验证失败,詹金斯说“未找到交互的注释方法”。

我的pom.xml的配置如下:

<plugin> 
<groupId>au.com.dius</groupId> 
<artifactId>pact-jvm-provider-maven_2.11</artifactId> 
<version>3.5.2</version> 
<configuration> 
    <!-- pactBrokerUrl,user name,password and project version required only 
        for consumer --> 
    <pactBrokerUrl>localhost</pactBrokerUrl> 
    <projectVersion>0.0.1</projectVersion> 
    <!-- service provider required only for producer --> 
    <serviceProviders> 
     <!-- <serviceProvider><name>provider</name><verificationType>ANNOTATED_METHOD</verificationType><consumers><consumer><name>consumer</name><pactUrl>pacturl</pactUrl></consumer></consumers></serviceProvider> --> 
     <serviceProvider> 
      <name>provider</name> 
      <verificationType>ANNOTATED_METHOD</verificationType> 
      <consumers> 
       <consumer> 
        <name>consumer</name> 
        <pactUrl>pacturl</pactUrl> 
       </consumer> 
      </consumers> 
     </serviceProvider> 
    </serviceProviders> 
    <classpathElements> 
     <classpathElement> 
      src/test/java 
     </classpathElement> 
    </classpathElements> 
    <configuration> 
     <pact.showStacktrace>true</pact.showStacktrace> 
    </configuration> 
</configuration> 
</plugin> 

回答

0

解决了这个问题。这是当我们通过使用-Dskiptests跳过测试类来编译项目时。因此,在此之后,我们运行该协议:验证测试类路径不包含在搜索中。

通过使用mvn test-compile编译并运行pact:verify来编译测试类来修复它。现在这些课程每次都会被拿起。

2

在做制片方测试你需要提供JSON合同。在那些合同中你有制片人的名字。从您的提供商测试中,您需要参考合同的位置和提供商的名称。

@RunWith(RestPactRunner.class) // Custom pact runner, child of PactRunner which runs only REST tests 
@Provider("myProducersNameAsItApearsInContract") // Set up name of tested provider 
@PactFolder("path/to/pact/contracts") // Point where to find pacts (See also section Pacts source in documentation) 

提供者的名称是在合同如下:

"provider": { 
    "name": "myProvider" 
}, 

编辑:

这里的问题在测试运行罚款和批注的方法是越来越回升当从我的本地机器运行,但是当我们从Jenkins运行时,在pact:verify期间引发特定错误。

你将不得不把完整的pact文件夹相对于你的项目Jenkins工作区。因为我们保持我们的协议合同src/test/resources/pacts那么我们@PactFolder值如下:

@PactFolder("src/test/resources/pacts") 
+0

我们正在使用PactRunner.class,并且合同文件中也提到了提供者名称。这里的问题是测试运行正常,并且从我的本地机器运行时获得批注的方法,但是当我们从Jenkins运行时,在pact:verify期间抛出特定错误。 –

+0

我们遇到了同样的问题。您将不得不使用src/test/resources /预先添加pact文件夹值。 –

+0

我们正在使用契约经纪人应用程序,我们的协议集中存储。在这种情况下,我们使用了下面的注释,但仍然是同样的失败。 (提供者) @PactUrl(url = {“http://pacturl/provider-consumer.json”}) –