在测试REST API时,我应该得到403的提示为200OK

问题描述

我正在为我的其余API编写一些测试,这是我使用本文的控制器:

@PostMapping
    public ResponseEntity<?> add(@RequestBody @Valid Product product) {
        List<Product> recentProduct = productService.findAllRecent();
        for(Product p : recentProduct){
            if(p.getName().equals(product.getName()) && p.getId() == product.getId()){
                return new ResponseEntity<Void>(HttpStatus.FORBIDDEN);
            }
        }
            productService.add(product);
            return new ResponseEntity<Void>(HttpStatus.OK);
    }

这是我的测试

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc   
public class ProductControllerTest {
   @Autowired
   private TestRestTemplate restTemplate;
   @MockBean
   private ProductRepository productRepository;
   @Autowired
   private MockMvc mockMvc;
   @Autowired
   ProductController productController;
   @Autowired
   ProductService productService;

   @Test
   void testAddOnceShouldReturn201() {

       Product product = new Product(1,"TestSameName",LocalDateTime.now());
       
       productController.add(product);
       Assertions.assertTrue(productController.add(product).getStatusCode().is2xxSuccessful());
   }

   @Test
   void testAddTwiceRecentShouldReturn403() {
       Product product = new Product(1,"TestName",LocalDateTime.now());
       Product product2 = new Product(1,LocalDateTime.now());
       productController.add(product);
       ResponseEntity<String> response = restTemplate.postForEntity("/v1/products",product,String.class);
       productController.add(product2);
       ResponseEntity<String> response2 = restTemplate.postForEntity("/v1/products",product2,String.class);
       Assertions.assertTrue(response2.getStatusCode().is4xxClientError());
   }
...

因此,我的findAllRecent将最近添加的数据提取到我的数据库中。我会创建一个列表,然后进行检查以查看是否在其中找到了新的添加项,我认为问题出在那部分,由于某种原因,我的列表可能为空或其他原因,我添加了两个相等的产品甚至id,因为我对此没有任何限制。 所以当我应该得到403时,我得到200ok。

任何提示和帮助都非常重要。预先感谢。

[编辑]如果我在邮递员上手动发送请求或通过curl发出请求,则应该添加行为。根据要求添加了整个测试类。

[Edit 157]我正在使用H2作为数据库。我不确定这是否重要,因为我要同时添加两个产品,并且两个产品都应该在内存中。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...