【问题标题】:Newb pact JVM providerNewb 协议 JVM 提供程序
【发布时间】:2022-01-23 20:02:45
【问题描述】:

希望有人能帮助我,我的头撞墙了一段时间,似乎无法突破。我尝试了多个示例并进行了无休止的搜索,但似乎无法找出我所缺少的。有很多例子要遵循,但大多数是 spring 应用程序,我对 spring 一无所知,所以我不知道我是否试图将 spring 与非 spring 代码混合......

这不是 Spring 应用程序,我也不希望它是。我试图让这只是一个简单的java生产者验证。尽可能简单......

我有一份很好的合同,我可以使用 JS 成功验证合同,但我想使用 JAVA。

我的代码中有太多导入,但目前不知道哪些不重要,哪些是重复的。

我有一些编译错误,但似乎不知道如何解决。我注意到代码中的编译错误。我想我已经很接近了,但目前还不知道。

pactTestTemplate 方法是实际进行合同验证的方法吗?那么这就是我从单元测试中调用的方法吗?在这一点上真的很困惑,背景中发生的所有魔法......

如果你能做到这一点,谢谢...

package testWorkContract;

import au.com.dius.pact.provider.junit.PactRunner;
import au.com.dius.pact.provider.junit.Provider;
import au.com.dius.pact.provider.junit5.*;
import au.com.dius.pact.provider.junit5.PactVerificationContext;
import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider;
import org.junit.jupiter.api.extension.*;
import org.junit.runner.RunWith;
import au.com.dius.pact.provider.junit.loader.PactFolder;
import au.com.dius.pact.provider.junit.loader.PactUrl;
import au.com.dius.pact.provider.junit.target.HttpTarget;
import au.com.dius.pact.provider.junit.target.Target;
import au.com.dius.pact.provider.junit.target.TestTarget;

import org.apache.http.HttpRequest;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.runner.RunWith;
import au.com.dius.pact.provider.junit.*;


@PactFolder("/temp/pacts")
@RunWith(PactRunner.class) // Say JUnit to run tests with custom Runner
@Provider("work") // Set up name of tested provider
public class PactProvider {

    @TestTarget // Annotation denotes Target that will be used for tests
    public final HttpsTestTarget target = new HttpsTestTarget("127.0.0.1", 443);

    @BeforeClass // Method will be run once: before whole contract test suite
    public static void setUpService() {
    }

    @Before // Method will be run before each test of interaction
    public void before() {
    }

    // JUST A QUICK TEST METHOD TO MAKE SURE MY UNIT TEST CAN WORK...
    public int testService() {
        return 0;
    }
    
    @TestTemplate   // THIS IS AN ERROR, CAN'T FIND @TestTemplate
    @ExtendWith(PactVerificationInvocationContextProvider.class)
    void pactTestTemplate(PactVerificationContext context, HttpRequest request) {
        context.verifyInteraction();
    }

}

这是我的依赖,也是第一次设置maven,所以可能会有问题:

    <properties>
        <json-schema-validator.version>3.3.0</json-schema-validator.version>
        <junit.jupiter.version>5.5.2</junit.jupiter.version>
        <pact.version>4.0.10</pact.version>
        <maven.surefire.version>3.0.0-M5</maven.surefire.version>
    </properties>
  
  <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.jupiter.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>au.com.dius</groupId>
            <artifactId>pact-jvm-consumer-junit5</artifactId>
            <version>${pact.version}</version>
        </dependency>
        <dependency>
            <groupId>au.com.dius</groupId>
            <artifactId>pact-jvm-provider-junit</artifactId>
            <version>${pact.version}</version>
        </dependency>
        <dependency>
            <groupId>au.com.dius</groupId>
            <artifactId>pact-jvm-provider-junit5</artifactId>
            <version>${pact.version}</version>
        </dependency>
  </dependencies>

【问题讨论】:

    标签: pact pact-jvm


    【解决方案1】:

    我能够克服我的问题。我想错了。我试图编写的代码应该是实际的 JUNIT 测试。我正在尝试编写一个 junit 测试,然后调用我尝试组合的类。

    这是我为初学者完成的 junit 测试

    package testWorkContract;
    
    import org.junit.jupiter.api.BeforeEach;
    import org.junit.jupiter.api.TestTemplate;
    import org.junit.jupiter.api.extension.ExtendWith;
    import org.testng.annotations.Test;
    
    //import au.com.dius.pact.core.model.annotations.PactFolder;
    import au.com.dius.pact.provider.junit.loader.PactFolder;
    import au.com.dius.pact.provider.junit.Provider;
    import au.com.dius.pact.provider.junit.loader.PactSource;
    import au.com.dius.pact.provider.junit5.HttpsTestTarget;
    import au.com.dius.pact.provider.junit5.PactVerificationContext;
    import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider;
    import junit.framework.Assert;
    
    @Provider("work")
    @PactFolder("/temp/pacts")
    
    public class PactProviderTest {
    
          @BeforeEach
          void before(PactVerificationContext context) {
    //      context.setTarget(HttpTestTarget.fromUrl(new URL(myProviderUrl)));
            // or something like
             context.setTarget(new HttpsTestTarget("localhost", 443, "/", true));
          }
          
          @Test
            @TestTemplate
            @ExtendWith(PactVerificationInvocationContextProvider.class)
            void pactVerificationTestTemplate(PactVerificationContext context) {
              context.verifyInteraction();
            }
    
    }
    

    这是 pom 文件

        <properties>
            <json-schema-validator.version>3.3.0</json-schema-validator.version>
            <junit.jupiter.version>5.5.2</junit.jupiter.version>
            <pact.version>4.0.10</pact.version>
            <maven.surefire.version>3.0.0-M5</maven.surefire.version>
        </properties>
      
      <dependencies>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>7.3.0</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>${junit.jupiter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-engine</artifactId>
                <version>5.5.2</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>au.com.dius</groupId>
                <artifactId>pact-jvm-consumer-junit5</artifactId>
                <version>${pact.version}</version>
            </dependency>
            <dependency>
                <groupId>au.com.dius</groupId>
                <artifactId>pact-jvm-provider-junit</artifactId>
                <version>${pact.version}</version>
            </dependency>
            <dependency>
                <groupId>au.com.dius</groupId>
                <artifactId>pact-jvm-provider-junit5</artifactId>
                <version>${pact.version}</version>
            </dependency>
      </dependencies>
            
            <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.0.0-M5</version>
                    <configuration>
                        <useSystemClassLoader>false</useSystemClassLoader>
                    </configuration>
                </plugin>
                    
                <plugin>
                    <groupId>au.com.dius.pact.provider</groupId>
                    <artifactId>maven</artifactId>
                    <version>4.1.11</version>
                    <configuration>
                      <serviceProviders>
                        <!-- You can define as many as you need, but each must have a unique name -->
                        <serviceProvider>
                          <name>work</name>
                          <!-- All the provider properties are optional, and have sensible defaults (shown below) -->
                          <protocol>https</protocol>
                          <host>localhost</host>
                          <port>443</port>
                          <path>/</path>
                          <insecure>true</insecure>
                          <pactFileDirectories>
                          
                                      <pactFileDirectory>/temp/pacts</pactFileDirectory>
                          </pactFileDirectories>
                          
                        </serviceProvider>
                      </serviceProviders>
                    </configuration>
                </plugin>
                
            </plugins>
            </build>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2020-12-31
      • 1970-01-01
      • 2013-02-01
      • 2014-12-15
      • 1970-01-01
      相关资源
      最近更新 更多