Play Framework 2.3 中模型的单元测试

Unit Testing of a model in Play Framework 2.3

我们最近从 Play Framework 2.1 迁移到 2.3,一些单元测试停止工作。

在这个特定的单元测试中,我使用了一个从 ebean 扩展模型的对象。我确保不使用 ebean 中的任何函数(例如 find()save()update())。

不幸的是,仅仅通过创建我的对象,我就得到了一个异常,因为它试图启动 Model.Finder 成员,我很确定它在迁移之前没有这样做。我该如何克服这个问题?

我的设置函数在 new 调用时抛出异常。

@Before
public void setUp() throws Exception {  
    SignageScheduleEntry allTheTimeSchedule = new SignageScheduleEntry();
}

我的对象本身,它在调试单元测试时在新 Model.Finder 上失败:

public static Model.Finder<Long,SignageScheduleEntry> find = new Model.Finder<>(Long.class, SignageScheduleEntry.class);

    public SignageScheduleEntry() throws InvalidPeriodException {   
        ....
    }

简而言之,我想在我的单元测试中使用我的对象而不使用 ebean 垃圾,就像在任何单元测试中使用任何对象一样。我怎样才能做到这一点?

谢谢!

如图所示:https://github.com/jamesward/play2torial/blob/master/JAVA.md#create-a-model

您需要像这样创建一个 "fakeApplication":

import org.junit.Test;

import static play.test.Helpers.fakeApplication;
import static play.test.Helpers.running;

import static org.fest.assertions.Assertions.assertThat;

import models.Task;

public class TaskTest {

    @Test
    public void create() {
        running(fakeApplication(), new Runnable() {
            public void run() {
                Task task = new Task();
                task.contents = "Write a test";
                task.save();
                assertThat(task.id).isNotNull();
            }
        });
    }

}

如果这不起作用,或者如果这不是您想要的,另一种方法更复杂,更复杂,来自 Play Java 文档: https://www.playframework.com/documentation/2.3.x/JavaTest#Unit-testing-models

您基本上必须为模型创建包装器,并在单元测试中模拟包装器。