Mon test d'intégration OAuth avant la démarrage du ressort 1.4 Était comme suit (mises à jour pour ne pas utiliser de fonctionnalités obsolètes):
@RunWith(SpringRunner.class) @SpringBootTest(classes = { ApplicationConfiguration.class }, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class OAuth2IntegrationTest { private static final String CLIENT_NAME = "client"; private static final String CLIENT_PASSWORD = "123456"; @Autowired private TestRestTemplate testRestTemplate; @Test public void testOAuthAccessTokenIsReturned() { MultiValueMap<String, String> request = new LinkedMultiValueMap<String, String>(); request.set("username", "user"); request.set("password", password); request.set("grant_type", "password"); @SuppressWarnings("unchecked") Map<String, Object> token1 = this.testRestTemplate. //how to add basic auth here assertNotNull("Wrong response: " + token, token.get("access_token")); } }
5 Réponses :
Ceci a été corrigé dans le démarrage de printemps 1.4.1 qui a une méthode supplémentaire
TestRestTemplate.WithBasicaTuth (nom d'utilisateur, mot de passe) p> blockQuote>
xxx pré> p>
Y a-t-il un moyen de le faire dans un endroit plus central? De cette façon, je devrais répéter le mot de passe dans chaque témoignage qui nécessite une authentification de base. La TestRestTemplate peut-elle être utilisée pour toujours utiliser une authentification de base en quelque sorte? Comment puis-je injecter la TestRestTemplate comme @Bean?
Il y a une meilleure solution pour que vous n'ayez pas besoin de retaper de la partie withbasicauth chaque fois
Cela ne fonctionne pas car la méthode de configuration doit être statique
Vous pouvez essayer avec @BEforeAssement, pas besoin d'être statique
Bien que La réponse acceptée est correcte, dans mon cas, je devais reproduire le Alors, j'ai essayé de définir dans que semble em> d'avoir l'effet de la définition de la modification par défaut Je ne suis pas tout à fait sûr que ce soit vraiment une solution valide, mais vous pouvez le donner à ... p> p> TestRestTemplate.withbasicauth (. ..) code> dans chaque méthode de test et classe.
src / test / java / m.microservice.backage code> une configuration comme ceci: p >
TestRestTemplate code>, permettant l'injection d'un identifiant de références
TestRestTemplate code> n'importe où dans mes cours de test. P>
Je pense qu'il existe une meilleure solution si vous utilisez toujours une authentification de base dans votre application, avec les propriétés "Nom de l'utilisateur.name" et "User.Password" définies sur votre application.Properties Fichier:
public class YourEndpointClassTest { private static final Logger logger = LoggerFactory.getLogger(YourEndpointClassTest.class); private static final String BASE_URL = "/your/base/url"; @TestConfiguration static class TestRestTemplateAuthenticationConfiguration { @Value("${spring.security.user.name}") private String userName; @Value("${spring.security.user.password}") private String password; @Bean public RestTemplateBuilder restTemplateBuilder() { return new RestTemplateBuilder().basicAuthentication(userName, password); } } @Autowired private TestRestTemplate restTemplate; //here add your tests...
Dans un cas de test unique, vous pouvez faire comme ceci:
@Before public void before() { // because .withBasicAuth() creates a new TestRestTemplate with the same // configuration as the autowired one. testRestTemplate = testRestTemplate.withBasicAuth("username", "password"); }
TestRestTemplate avecbasicauth (String Nom d'utilisateur, mot de passe de chaîne) Ceci semble disponible uniquement dans Spring Boot 1.4.1, est-ce la solution