Playframework Play-2.x,如何联合测试带注释的模型验证标准
我是一个新手,但或多或少是一个经验丰富的Java开发人员(这就是为什么我搜索了一些针对Java的MVC框架,而不是rails/cake/django) 无论如何 我的问题是:是否可以从unitTest中测试模型验证(带注释的验证标准)? 这不是关于测试CORE中的验证是否正确工作,而是关于测试我是否弄错了注释:-p 经过一段时间的谷歌搜索和阅读,我知道验证是表单api的一部分。所以我试着在我的单元测试中设置一个表单。但这不管用, 这是密码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
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。所以问题不在于我的测试。读这本手册简直让我哑口无言
无论如何。谢谢我现在添加了我的整个测试课程。但它不起作用。我知道我必须开始一个伪造的申请。。。你运行了这个代码?