Пакт-тест на Junit5, что определить в @ExtendWith - PullRequest
1 голос
/ 08 мая 2019

Я начинаю с тестирования Pact, у меня уже есть тест потребительского контракта и создается файл пакта JSON.

В приведенном ниже примере есть тест, который запускает файл Pact. Вот пример кода, которому я следую, он содержит провайдера (bs), потребителя (клиента) и верификатора (который запускает файл Pact) пример договора

import au.com.dius.pact.provider.junit.PactRunner;
import au.com.dius.pact.provider.junit.Provider;
import au.com.dius.pact.provider.junit.State;
import au.com.dius.pact.provider.junit.loader.PactFolder;
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.junit.runner.RunWith;

@RunWith(PactRunner.class) 
@Provider("BusService") 
@PactFolder("../pacts")

public class BusStopContractTest {

    @State("There is a bus with number 613 arriving to Hammersmith bus station") 
    public void hammerSmith() {
        System.out.println("There is a bus with number 613 arriving to Hammersmith bus station" );
    }


    @TestTarget 
    public final Target target = new HttpTarget(8111);

}

Я хочу сделать то же самое, но для Junit5, поэтому вместо @ RunWith мне нужно использовать @ ExtendWith , но что должно быть определено внутри ExtendWith () ?

@ ExtendWith (PactRunner.class) не работает, я также пытался с @ ExtendWith (PactConsumerTestExt.class) тоже не сработало.

У меня в поме:

 <!-- Pact Provider-->
    <dependency>
      <groupId>au.com.dius</groupId>
      <artifactId>pact-jvm-provider-junit_2.12</artifactId>
      <version>3.5.24</version>
    </dependency>

Юнит Юпитер

<groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-api</artifactId>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-engine</artifactId>
  <scope>test</scope>
</dependency>

Есть предложения?

1 Ответ

2 голосов
/ 08 мая 2019

PactRunner - это бегун JUnit 4.Вместо этого вам нужно использовать расширение JUnit 5.

Сначала вам нужно добавить зависимость расширения JUnit 5 к вашему pom.xml.Например:

<dependency>
    <groupId>au.com.dius</groupId>
    <artifactId>pact-jvm-provider-junit5_2.12</artifactId>
    <version>3.5.24</version>
</dependency>

Тогда вы можете использовать PactVerificationInvocationContextProvider:

@ExtendWith(PactVerificationInvocationContextProvider.class)
@Provider("BusService") 
@PactFolder("../pacts")
public class BusStopContractTest {

    @State("There is a bus with number 613 arriving to Hammersmith bus station") 
    public void hammerSmith() {
        System.out.println("There is a bus with number 613 arriving to Hammersmith bus station" );
    }

    // A @BeforeEach method with an injected PactVerificationContext replaces
    // the old method annotated with @TestTarget
    @BeforeEach
    void setUpTarget(PactVerificationContext context) {
      context.setTarget(new HttpTarget(8111));
    }
}
...