我正在嘗試執行集成測試,以查看我的註冊端點失敗時的行爲。我的註冊端點是由外部源(由Spring OAuth保護)提供的API。客戶端網站使用客戶端Spring Oauth與API進行通信。針對Spring Oauth的模擬服務器端點
我試圖做的是嘲笑API,但是,我得到的問題不是針對嘲諷的端點; org.springframework.web.client.ResourceAccessException:對「http://localhost:8081/oauth/token」POST請求的I/O錯誤:連接被拒絕:連接;嵌套異常是java.net.ConnectException:連接被拒絕:連接。下面是我下面的測試:
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:RegistrationControllerIntegrationTest-context.xml"})
public class RegistrationControllerIntegrationTest {
@Resource
RegistrationController registrationController;
@Resource
private WebApplicationContext webApplicationContext;
MockMvc mockMvc;
@Value("${oauth.accessTokenUri}")
private String oauthUri;
private MockRestServiceServer mockRestServiceServer;
private OAuth2RestTemplate clientCredRest;
@Resource(name = "clientCredentialRest")
public void setClientCredRest(OAuth2RestTemplate clientCredRest) {
this.clientCredRest = clientCredRest;
}
@Before
public void setUp()
{
this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
this.mockRestServiceServer = MockRestServiceServer.createServer(this.clientCredRest);
}
@Test
public void testRegistrationThatReturnsBadRequestWhenUserAlreadyExist()
{
this.mockRestServiceServer.expect(MockRestRequestMatchers.requestTo("localhost:8081/oauth/token")).andExpect(MockRestRequestMatchers.method(HttpMethod.POST))
.andRespond(MockRestResponseCreators.withSuccess().contentType(MediaType.APPLICATION_JSON).body("{\n" +
"\"access_token\": \"8ecd93d4-2484-46de-922a-652fa79d027d\",\n" +
"\"token_type\": \"bearer\",\n" +
"\"expires_in\": 1265\n" +
"\"scope\": \"read write\"\n" +
"}"));
Gson gson = Converters.registerDateTime(new GsonBuilder()).create();
PodamFactory factory = new PodamFactoryImpl();
RegistrationDTO dto = factory.manufacturePojo(RegistrationDTO.class);
dto.setUserName("test");
String json = gson.toJson(dto);
this.mockRestServiceServer.expect(MockRestRequestMatchers.requestTo("localhost:8081/public/registration")).andExpect(MockRestRequestMatchers.method(HttpMethod.POST))
.andRespond(MockRestResponseCreators.withBadRequest().contentType(MediaType.APPLICATION_JSON).body("{\n" +
"resource: null\n" +
"field: \"user_name\"\n" +
"code: \"0\"\n" +
"message: \"Username already exist\"\n" +
"}"));
MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/frontend/register").content(json).header("activate", "true").header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36").header("Origin","chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo").contentType(MediaType.APPLICATION_JSON);
try {
this.mockMvc.perform(requestBuilder).andExpect(MockMvcResultMatchers.status().isBadRequest());
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意,我之所以設置這兩個預期的嘲笑Web服務器是由於春季的Oauth如何獲取發出請求到public/registration
終點前一個訪問令牌。讓我知道我是否缺少任何東西。
謝謝。
它看起來像OAuth2RestTemplate創建一個內部RestTemplate檢索不被綁定MockRestServiceServer所述令牌。我在Spring中創建了一個問題https://github.com/spring-projects/spring-security/issues/4217 – Tuno