@RunWith(SpringJUnitRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOMPORT)
class ResourceTest {
@Autowired
private TestRestTemplate testRestTemplate;
@MockBean
private AuthService authService; //This is used in the method being hit by the testRestTemplate.
@Before
public void setUp() extends Exception {
given(this.authService.auth(user)).willReturn(user); //given mock object some behaviour
//Some Code
MockitoAnnotations.initMocks(this);
}
@Test
public void testAuthValidParameters() throws Exception {
//Assume Every Parameter is appropriate
HttpEntity<String> request = new HttpEntity<>(postBody,headers);
//The Exception occurs here
ResponseEntity<String> responseEntity = this.testRestTemplate.postForEntity("/path/auth/",request,String.class);
//Some asserts and other tests
}
}
例外如下
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:53234/path/auth/"
当我不模拟并让实际方法运行或直接使用模拟时,问题不会发生(似乎与PowerMock结合使用的正常模拟实际上并没有影响所调用的方法)。它们被执行,并且正在集成测试,但无法解决问题。
所以,当我使用无类型时,会出现此例外。可能是根本原因,我该如何解决。
编辑1:
使用几乎相同的代码并更改
中的模拟固执when(authService.authenticate(any(User.class))).thenReturn(user);
我获得了HTTP代码400。这是否意味着它正在击中服务器?这可能意味着它正在捡起无酒精,但是根本没有更改的参数被拒绝。
您可以写下类似的东西,让您的模拟服务返回一些响应。
User user= new User();
user.setUserName("abc");
user.setPassword("testPass");
when(authService.authenticate(user)).thenReturn(user);
您可以调用TestRestTemplate并发布您的对象并期望此响应作为回报。
定义重新安装的端口:
@Value("${local.server.port}")
private int tomcatPort;
@Before
public void setup() {
RestAssured.port = tomcatPort;
}