TestRestTemplate 无法检测到在 SpringBootTest 中被模拟的资源


@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;
}

相关内容

  • 没有找到相关文章

最新更新