Impossible de transmettre une exception provenant d'un rappel anonyme dans le test du framework de lecture

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

Question

J'ai le test d'intégration suivant dans le cadre d'un projet 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
        }
    });
}

La ligne oAuthClient.accessToken(request); lance OAuthProblemException, ce qui est correct.Mon problème est qu'en raison du rappel interne anonyme, je n'ai pas la possibilité de propager l'exception et de faire quelque chose comme @Test(expected = OAuthProblemException.class) comme dans mon code.

Je pourrais intercepter l'exception et marquer le test comme un succès dans la section catch, mais les tests Play Framework n'ont pas de méthodes success() ou fail() intégrées (que j'ai pu trouver), ce qui m'amène à faire quelque chose de stupide comme celui-ci.

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
}

Je ne pense pas que cela semble très intuitif.Avez-vous des suggestions pour mieux résoudre ce problème ?

Merci!

Était-ce utile?

La solution

Ok, j'ai trouvé la fonction fail() :-)

import static org.junit.Assert.*;

Avec cela, je peux faire ce qui suit :

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

Ce qui a l'air bien mieux je trouve.Si vous pouvez penser à des solutions alternatives, comme un moyen de propager l'exception ou similaire, j'aimerais en entendre parler.

(Stupide que je suis)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top