java Spring Cloud Stream Binder for Azure Service Bus打破测试

3ks5zfa0  于 2023-05-15  发布在  Java
关注(0)|答案(1)|浏览(114)

将依赖项添加到

<dependency>
            <groupId>com.azure.spring</groupId>
            <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId>
        </dependency>

突然使我的一些RestTemplate客户端测试失败,错误如下:

java.lang.AssertionError: JSON path "$"
Expected: (a collection containing <152> and a collection containing <153>)
     but: a collection containing <152> was String "<UnmodifiableRandomAccessList><item>152</item><item>153</item></UnmodifiableRandomAccessList>"

Expected :application/json
Actual   :application/xml;charset=UTF-8

我的测试看起来像:

@Autowired
    private RestTemplate restTemplate;
    
    private MockRestServiceServer mockServer;
    
    @BeforeEach
    public void init()
    {
        mockServer = MockRestServiceServer.createServer(restTemplate);
    }

    public void test() throws Exception
    {
        mockServer.expect(requestTo(url))
            .andExpect(method(HttpMethod.POST))
            .andExpect(jsonPath("$", hasItems(152, 153)))
            .andRespond(withStatus(HttpStatus.OK)
            .contentType(MediaType.APPLICATION_JSON)
            .body("{}")); // actual code removed for brevity
        
        ResultDTO result = client.makeRestCall(Set.of(1L)); // beneath makes a RestTemplate call to the url

        assertNotNull(result);
    }

奇怪的是,一个测试类中只有一些测试失败了,也就是说,这个类有8个测试,其中4个失败了,没有明显的原因。我看到的是,我删除了Azure依赖项,测试通过了。有没有人知道这种依赖会带来什么,从而破坏我的代码?

o8x7eapl

o8x7eapl1#

这是a known issue。问题是Azure依赖项带来了jackson-dataformat-xml依赖项,它破坏了rest控制器响应的格式(使它们成为XML而不是默认的JSON)。解决这个问题的简单方法是排除依赖关系:

<exclusion>
    <artifactId>jackson-dataformat-xml</artifactId>              
    <groupId>com.fasterxml.jackson.dataformat</groupId>
</exclusion>

线程提到依赖项已成为可选的,但我找不到发生这种情况的版本。

相关问题