Validation 如何在域类中模拟验证以进行测试?
我有一个域类,它使用一个非常复杂的自定义验证器;它需要一个单独的合作者。现在我正在为它创建一个控制器,但我想模拟验证部分。我希望能够知道何时发生某个验证错误,以便控制行为 比如说我有,Validation 如何在域类中模拟验证以进行测试?,validation,unit-testing,grails,Validation,Unit Testing,Grails,我有一个域类,它使用一个非常复杂的自定义验证器;它需要一个单独的合作者。现在我正在为它创建一个控制器,但我想模拟验证部分。我希望能够知道何时发生某个验证错误,以便控制行为 比如说我有, class Person { static constraint = { key validator: { //complex stuff goes here } } } 在我的控制器规范中,我希望能够告诉我何时希望验证通过或失败。我试
class Person {
static constraint = {
key validator: {
//complex stuff goes here
}
}
}
在我的控制器规范中,我希望能够告诉我何时希望验证通过或失败。我试过做Person.metaClass.validate={true}
,但似乎不起作用。这就是我的测试代码的样子
void "Test controller when validation passes"() {
when:
controller.json = new Person(...)
controller.doSomething()
then:
//test post condition, etc.
}
如果没有效果,我想直接模拟命令对象,比如
void "Test controller when validation passes"() {
when:
controller.doSomething(Mock(Person))
then:
1 * _.changeState(_)
//test post condition, etc.
}
但是如果我能让第一个工作,我更喜欢它。我的项目中有类似的任务。我们的实现包括ErrorsContainer类,该类通过封装一组对象如何交互来表示对象的概念。Mediator通过防止对象彼此显式引用来促进松散耦合,并允许您独立地改变它们的交互 这种方法的另一个优点是可以缓存验证过程的结果。当应用于相同的前提条件、对象和规则时,它可以提高性能 关于 我想知道我希望验证通过还是失败 您只需调用它的
isEmpty()
,并在如下简单代码中使用它:
public class ValidationProcessor {
private ErrorsContainer errorsContainer;
//process Validation
........
//if validation errors are found add them
//into the container
........
//allow to manage the Validation process
public void SetValidationState(boolean isPassState){
if(isPassState){
//set it's state to 'pass'
errorsContainer.setEmpty();
}else{
//apply logic when validation errors are found
}
}
public void UseCurrentValidationState(){
if(errorsContainer.isEmpty()){
//apply logic when no validation errors are found
}else{
//apply logic when validation errors are found
}
}
}