0

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

这不是一个弹簧应用程序,我也不希望它是。我试图让这只是一个简单的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>
4

1 回答 1

0

我能够克服我的问题。我想错了。我试图编写的代码应该是实际的 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>
于 2021-12-22T19:47:17.893 回答