Play-2x,如何单元测试注释模型验证标准

时间:2014-05-13 17:36:57

标签: playframework playframework-2.0 playframework-2.2

我很擅长玩游戏,但是或多或少经验丰富的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";
    }
}

2 个答案:

答案 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。所以问题不在我的测试中。阅读手册对我来说是愚蠢的。

反正。谢谢