Não é possível passar a exceção de dentro do retorno de chamada anônimo no teste da estrutura de jogo

StackOverflow https://stackoverflow.com//questions/21003479

Pergunta

Tenho o seguinte teste de integração como parte de um projeto do Play Framework.

@Test(expected = OAuthProblemException.class)
public void testFailedCredentials() throws OAuthProblemException, OAuthSystemException {
    running(testServer(3333, fakeApplication(inMemoryDatabase())), HTMLUNIT, new F.Callback<TestBrowser>() {
        public void invoke(TestBrowser browser) throws OAuthProblemException, OAuthSystemException {
            OAuthClientRequest request = OAuthClientRequest
                    .tokenLocation("http://localhost:3333/oauth2/access_token")
                    .setGrantType(GrantType.PASSWORD)
                    .setClientId("client_id")
                    .setClientSecret("client_secret")
                    .setUsername("username")
                    .setPassword("password_should_not_pass")
                    .buildBodyMessage();

            OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient());

            oAuthClient.accessToken(request); //throws OAuthProblemException
        }
    });
}

A linha oAuthClient.accessToken(request); lança OAuthProblemException, o que está correto.Meu problema é que por causa do retorno de chamada interno anônimo, não tenho a possibilidade de propagar a exceção e fazer algo como @Test(expected = OAuthProblemException.class) como no meu código.

Eu poderia capturar a exceção e marcar o teste como um sucesso dentro da seção catch, mas o teste do Play Framework não possui os métodos success() ou fail() integrados (que eu pude encontrar), resultando em algo estúpido como isto

try {
    oAuthClient.accessToken(request);
    assertThat("This credentials should fail").isEmpty();//Force a fail
} catch (OAuthProblemException e) {
    assertThat(e).isInstanceOf(OAuthProblemException.class);//Force a success. I could probably skip this line
}

Não acho que isso pareça muito intuitivo.Alguma sugestão de como resolver isso de uma maneira melhor?

Obrigado!

Foi útil?

Solução

Ok, encontrei a função fail() :-)

import static org.junit.Assert.*;

Com isso posso fazer o seguinte:

try {
    oAuthClient.accessToken(request);
    fail();
} catch (OAuthProblemException e) {
    //success
}

O que parece muito melhor, eu acho.Se você puder pensar em soluções alternativas, como uma forma de propagar a exceção ou algo semelhante, eu adoraria ouvir sobre isso.

(Eu sou estúpido)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top