SpringBoot REST把UnitTest返回406 - 手动测试200

时间:2018-02-08 15:29:46

标签: rest unit-testing spring-boot

我尝试在我的应用程序中集成Unittests,但在测试PUT(JSON)REST API时失败。

测试代码:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class EventOrderRestTest {

    @Autowired
    private MockMvc mvc;

    @Autowired
    ObjectMapper objectMapper;

    private Integer id;


    @Test
    public void a_saveNewEventOrder() throws Exception {

        EventOrder o = new EventOrder();
        o.setPlz(54321);

        this.id = Integer.parseInt(
                mvc.perform(put("/order")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(o))
                        .accept(MediaType.TEXT_PLAIN))
                    .andExpect(status().isOk())
                    .andReturn().getResponse().getContentAsString()
        );

    }

我的应用程序中没有其他测试配置。

因此,在运行API并手动调用它时,它会返回代码200和新的ObjectId。

当测试在正文中以相同的值运行时,它返回代码406。

它有什么问题吗?我错过了什么?

2 个答案:

答案 0 :(得分:1)

406 HTTP状态 - What is "406-Not Acceptable Response" in HTTP?

也许这就是问题的原因。

    class aClass<T>
    {
        public void Compare_Generics(T[] m)
        {
            var result = new List<T>();
            var left = new List<T>();
            var right = new List<T>();

            for(int i = 0; i < m.Length; i++)
            {
                if(i < m.Length/2)
                    left.Add(m[i];
                else
                    right.Add(m[i]);
            }

            if(left[0] <= right[0])//This is the no no line that the compiler does not like
            {
                result.Add(left[0]);
            }
        }
    }

答案 1 :(得分:1)

如果你想获得纯文本,控制器中负责put / order端点的方法应该返回String。该方法应如下所示:

@PutMapping(path="/order")
public @ResponseBody String putOrder() { 
   ...
   return "result";
}