Playframework Play-2.x,如何联合测试带注释的模型验证标准

Playframework Play-2.x,如何联合测试带注释的模型验证标准,playframework,playframework-2.0,playframework-2.2,Playframework,Playframework 2.0,Playframework 2.2,我是一个新手,但或多或少是一个经验丰富的Java开发人员(这就是为什么我搜索了一些针对Java的MVC框架,而不是rails/cake/django) 无论如何 我的问题是:是否可以从unitTest中测试模型验证(带注释的验证标准)? 这不是关于测试CORE中的验证是否正确工作,而是关于测试我是否弄错了注释:-p 经过一段时间的谷歌搜索和阅读,我知道验证是表单api的一部分。所以我试着在我的单元测试中设置一个表单。但这不管用, 这是密码 package models; import sta

我是一个新手,但或多或少是一个经验丰富的Java开发人员(这就是为什么我搜索了一些针对Java的MVC框架,而不是rails/cake/django) 无论如何

我的问题是:是否可以从unitTest中测试模型验证(带注释的验证标准)? 这不是关于测试CORE中的验证是否正确工作,而是关于测试我是否弄错了注释:-p 经过一段时间的谷歌搜索和阅读,我知道验证是表单api的一部分。所以我试着在我的单元测试中设置一个表单。但这不管用,

这是密码

package models;


import static org.junit.Assert.*;
import static play.test.Helpers.fakeApplication;
import static play.test.Helpers.inMemoryDatabase;
import static play.test.Helpers.start;
import static play.test.Helpers.stop;

import java.util.HashMap;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import play.data.Form;
import play.test.FakeApplication;

public class UserTests {
    private FakeApplication fakeApplication;

    @Before
    public void startup() {
        fakeApplication = fakeApplication(inMemoryDatabase());
        start(fakeApplication);
    }

    @Test
    public void testCreateUserWorks(){
        String name = "asf";
        HashMap<String,String> values = new HashMap<String,String>();
        values.put("username", name);
        Form<User> userForm = Form.form(User.class);
        userForm = userForm.bind(values);
        System.out.println(userForm.toString());
        System.out.println(userForm.data());

        User tmp = userForm.get();
        System.out.println("muh4");
        User testUser = User.find.where().eq("username", name).findUnique();
        assertNotNull(testUser);
        System.out.println(testUser.getEmail());
        assertEquals(name, testUser.username);
        assertEquals(name+"@xxx.xxx",testUser.getEmail());
    }

    @After
    public void tearDown(){
        stop(fakeApplication);
    }

}
封装模型;
导入静态org.junit.Assert.*;
导入静态play.test.Helpers.fakeApplication;
导入静态play.test.Helpers.inMemoryDatabase;
导入静态play.test.Helpers.start;
导入静态play.test.Helpers.stop;
导入java.util.HashMap;
导入org.junit.After;
导入org.junit.Before;
导入org.junit.Test;
导入play.data.Form;
导入play.test.FakeApplication;
公共类用户测试{
私人伪造申请伪造申请;
@以前
公共无效启动(){
fakeApplication=fakeApplication(inMemoryDatabase());
启动(伪造申请);
}
@试验
public void testCreateUserWorks(){
String name=“asf”;
HashMap值=新的HashMap();
value.put(“用户名”,名称);
formuserform=Form.Form(User.class);
userForm=userForm.bind(值);
System.out.println(userForm.toString());
System.out.println(userForm.data());
User tmp=userForm.get();
System.out.println(“muh4”);
User testUser=User.find.where().eq(“用户名”,名称).findUnique();
assertNotNull(testUser);
System.out.println(testUser.getEmail());
assertEquals(名称,testUser.username);
assertEquals(name+“@xxx.xxx”,testUser.getEmail());
}
@之后
公共无效拆卸(){
停止(伪造申请);
}
}
但是当到达userForm.get()时,它只会失败 Test models.UserTests.testCreateUserWorks失败:java.lang.IllegalStateException:无值

userForm.toString()是这样说的 表单(of=class models.User,data={username=asf},value=None,errors={})

我知道我是新手,但我不知道该尝试什么。也许是因为Spring数据绑定没有在实际应用中初始化

先谢谢你 蒂米

这是我的模型代码

@Entity
public class User extends Model {   
    @Id
    @Constraints.MinLength(1)
    String username;
    @Transient String email;        


    public List<ValidationError> validate(){
        List<ValidationError> errors = new ArrayList<ValidationError>();

        return errors;
    }

    public static Finder<String, User> find = new Finder<String, User>(String.class, User.class);

    public String getEmail(){
        return this.username + "@xxx.xxx";
    }
}
@实体
公共类用户扩展模型{
@身份证
@限制条件。最小长度(1)
字符串用户名;
@临时字符串电子邮件;
公共列表验证(){
列表错误=新建ArrayList();
返回错误;
}
publicstaticfinder=newfinder(String.class,User.class);
公共字符串getEmail(){
返回this.username+“@xxx.xxx”;
}
}

如果可以的话,您只需要用一个假的应用程序开始单元测试

import static play.test.Helpers.fakeApplication;
import static play.test.Helpers.inMemoryDatabase;
import static play.test.Helpers.start;
import static play.test.Helpers.stop;

import org.junit.After;

import play.test.FakeApplication;

public abstract class AbstractFakePlayApplication {

    private FakeApplication fakeApplication;

        @Before
    public void startup() {
        fakeApplication = fakeApplication(inMemoryDatabase());
        start(fakeApplication);
    }

    @After
    public void tearDown() {
        stop(fakeApplication);
    }

}

我发现了我的错误。。。我实现了一个有点“stub”的validate()方法,它返回一个空数组,而不是null。所以问题不在于我的测试。读这本手册简直让我哑口无言


无论如何。谢谢

我现在添加了我的整个测试课程。但它不起作用。我知道我必须开始一个伪造的申请。。。你运行了这个代码?