我有一个使用自定义验证程序的域类,它非常复杂;它需要一个单独的合作者。现在我正在为它创建一个控制器,但我想模拟有关验证的部分。我希望能够判断何时发生某个验证错误,以便控制行为。
例如,我有,
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.
}
但如果我能让第一个工作,我会更喜欢它。
答案 0 :(得分:0)
我的项目中有类似的任务。我们的实现包括 ErrorsContainer 类,它通过封装一组对象如何交互来表示Mediator design pattern的概念。 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
}
}
}