【问题标题】:Play-2.x, How to UnitTest annotated model validation criteriaPlay-2.x,如何对带注释的模型验证标准进行单元测试
【发布时间】:2014-05-14 20:51:18
【问题描述】:

我很新玩,但或多或​​少有经验的 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);
    }

}

但是当到达 userForm.get() 时它只是失败了 测试 models.UserTests.testCreateUserWorks 失败:java.lang.IllegalStateException:没有值

userForm.toString() 这么说 Form(of=class models.User, data={username=asf}, value=None, errors={})

我知道我是新手,但我不知道该尝试什么。也许是Spring Databinding不在实际应用中时未初始化?!

提前谢谢你 时光荏苒

这是我的模型代码

@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";
    }
}

【问题讨论】:

    标签: playframework playframework-2.0 playframework-2.2


    【解决方案1】:

    这行得通,你只需要用一个假的应用程序开始你的单元测试。

    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);
        }
    
    }
    

    【讨论】:

    • 我现在添加了整个测试课程。但它不起作用。我知道我必须启动一个 fakeApplication... 你让这段代码运行了吗?
    【解决方案2】:

    我发现我的错误...我实现了一个有点“存根”的 validate() 方法,它返回一个空数组,而不是 null。所以问题不在于我的测试。阅读手册让我变得愚蠢。

    无论如何。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2016-08-24
      • 2017-09-13
      • 2018-03-26
      相关资源
      最近更新 更多