我在一个类中有一些注解,
public class ProductModel {
@Pattern(regexp="^(1|[1-9][0-9]*)$", message ="Quantity it should be number and greater than zero")
private String quantity;
字符串
然后在我的控制器里
@Controller
public class Product Controller
private ProductService productService;
@PostMapping("/admin/product")
public String createProduct(@Valid @ModelAttribute("product") ProductModel productModel, BindingResult result)
{
// add println for see the errors
System.out.println("binding result: " + result);
if (!result.hasErrors()) {
productService.createProduct(productModel);
return "redirect:/admin/products";
} else {
return "product";
}
}
型
然后,我尝试从ProductController中对产品进行测试。
@RunWith(MockitoJUnitRunner.class)
public class ProductControllerTest {
@Autowired
private MockMvc mockMvc;
@Mock
ProductService productService;
@InjectMocks
ProductController productController;
@Mock
private BindingResult mockBindingResult;
@Before
public void setupTest() {
MockitoAnnotations.initMocks(this);
Mockito.when(mockBindingResult.hasErrors()).thenReturn(false);
}
@Test
public void createProduct() throws Exception {
productController = new ProductController(productService);
productController.createProduct(new ProductModel(), mockBindingResult);
型
在这里我不知道如何向对象productmodel中添加值,也不知道如何测试“. number should be greater than zero”的消息输出。我试图做的是创建一个对象,然后使用值进行Assert,使其失败或工作,如assertEquals(hello,objectCreated.getName());任何建议或帮助都将受到高度赞赏。
3条答案
按热度按时间xqnpmsa81#
要验证bean注解,你必须有执行中的上下文。你可以这样做:
字符串
然后您的测试将验证注解。
但是,如果你只是想验证模型的注解(没有其他业务规则),你可以使用验证器:
型
iugsix8n2#
除了Allan Moreira Leite的答案,您还可以通过使用一个
beforeAll()
方法来使测试设置更加简洁:字符串
ffscu2ro3#
只需使用模型的setter
字符串