如何解决在测试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 举报,一经查实,本站将立刻删除。