我很擅长玩游戏,但是或多或少经验丰富的Java开发人员。(这就是为什么我搜索了一些MVC Framework for Java,而不是rails / cake / django) 总之...
我的问题是:是否可以在unitTest中测试模型验证(带注释的验证标准)? 它不是关于测试CORE中的验证是否正常工作,而是关于testig,如果我搞砸了注释:-p 花了一段时间在Google上搜索并阅读此内容后,我知道验证是Form 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);
}
}
但是当到达userForm.get()时它就失败了 测试模型.UserTests.testCreateUserWorks失败:java.lang.IllegalStateException:无值
userForm.toString()说明了这一点 Form(of = class models.User,data = {username = asf},value = None,errors = {})
我知道我是新手,但我不知道该尝试什么。也许这是关于Spring Databinding在没有真正的应用程序时没有被初始化的东西?!
提前谢谢你 TimmeeY
这是我的模型代码
@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";
}
}
答案 0 :(得分:0)
这很有效,你只需要用虚假的应用程序开始你的单元测试。
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);
}
}
答案 1 :(得分:0)
我发现了我的错误......我实施了一些&#34; stub&#34; validate()方法,返回一个空数组,而不是null。所以问题不在我的测试中。阅读手册对我来说是愚蠢的。
反正。谢谢