Использование разных макетов в разных штатах Pact провайдера в Dropwizard - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь настроить поставщика пакта с приложением, запускающим Dropwizard, но у меня возникают проблемы с использованием разных макетов для разных состояний. Есть ли в Dropwizard эквивалент Spring @ MockBean или какой-либо другой способ добиться этого в Dropwizard?

Это мой класс провайдера:

@RunWith(PactRunner.class)
@Provider("my-proxy")
@PactFolder("src/test/java/pact/pacts")
public class UserContractTest {

    private static final String CONFIG_PATH = ResourceHelpers.resourceFilePath("config.yml");
//    I want to do the commented out code in Dropwizard with Dropwizard equivalents
//    @MockBean
//    private MyClass myMockedClass;

    @ClassRule
    public static final DropwizardAppRule<MyAppConfiguration> RULE =
            new DropwizardAppRule<>(MyAppMock.class, CONFIG_PATH);

    @TestTarget
    public final Target target = new HttpTarget(RULE.getLocalPort());

    @State("default")
    public void toDefaultState(Map<String, String> params) {
        if(params.get("someState").equals("stateOne")) {
            // when(myMockedClass.someFunc()).thenReturn("someAnswerForStateOne");
        } else {
            // when(myMockedClass.someFunc()).thenReturn("someAnswerForAllOtherStates");
        }
    }
}

1 Ответ

0 голосов
/ 23 октября 2019

В итоге я использовал argThat в параметрах запроса, чтобы иметь возможность использовать два разных макета метода для одного и того же метода.

public class MyAppMock extends MyApp {

   @Override
   protected UserProvider getUserProvider(Config config) {
       var myServiceMock = mock(UserProvider.class);

       var userResponseType = new UserResponseType();
       var user = new User();
       user.setName("Lisa");
       user.setAge(30);
       userResponseType.setUser(user);

       doReturn(userResponseType)
               .when(myServiceMock)
               .createUser(argThat(createUserRequestType ->  createUserRequestType.getName().equals("Lisa")), any());

       var errorMessage = "Error";
       doThrow(new SomeException(errorMessage, SC_NOT_FOUND))
               .when(myServiceMock)
               .createPaymentOrder(argThat(createUserRequestType ->  createUserRequestType.getName().equals("John")), any());

       return myServiceMock;
   }
}
...