Playframework 2.0 Playframework2控制器测试[Java]

Playframework 2.0 Playframework2控制器测试[Java],playframework-2.0,playframework-2.1,Playframework 2.0,Playframework 2.1,在播放2.1中执行控制器测试时出现一些奇怪的问题 package controllers; import static org.fest.assertions.Assertions.assertThat; import static play.mvc.Http.Status.OK; import static play.test.Helpers.callAction; import static play.test.Helpers.charset; import static play

在播放2.1中执行控制器测试时出现一些奇怪的问题

    package controllers;

import static org.fest.assertions.Assertions.assertThat;
import static play.mvc.Http.Status.OK;
import static play.test.Helpers.callAction;
import static play.test.Helpers.charset;
import static play.test.Helpers.contentType;
import static play.test.Helpers.status;

import models.Section;
import models.Topic;

import org.junit.Test;

import play.mvc.Result;

public class TopicsTest extends BaseControllerTest{
    @Test
    public void testCallList() {
        Section s = new Section();
        s.name = "Music section";
        s.id = 1L;
        s.description = "section about music";
        s.save();
        System.out.println(Section.find.where().eq("name", "Music section").findUnique().id); // output 1
        Result result = callAction(controllers.routes.ref.Topics.list(1));
        assertThat(status(result)).isEqualTo(OK);
    }
}
控制器代码非常简单,在开发模式下运行良好。 检查它:

public static Result list(Long id) {
    return ok(list.render(Section.find.byId(id)));
}
错误堆栈跟踪:

java.lang.RuntimeException: java.lang.NoSuchMethodError: models.Section.getName()Ljava/lang/String;
    at play.libs.F$Promise$6.apply(F.java:401)
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:253)
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:249)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:29)
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.liftedTree1$1(BatchingExecutor.scala:67)
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.processBatch$1(BatchingExecutor.scala:66)
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:82)
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply(BatchingExecutor.scala:59)
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply(BatchingExecutor.scala:59)
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72)
    at akka.dispatch.BatchingExecutor$Batch.run(BatchingExecutor.scala:58)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:137)
    at scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1441)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
Caused by: java.lang.NoSuchMethodError: models.Section.getName()Ljava/lang/String;
    at views.html.topics.list$.apply(list.template.scala:32)
    at views.html.topics.list$.render(list.template.scala:62)
    at views.html.topics.list.render(list.template.scala)
    at controllers.Topics.list(Topics.java:24)
    at controllers.ref.ReverseTopics$$anonfun$list$3.apply(routes_reverseRouting.scala:761)
    at controllers.ref.ReverseTopics$$anonfun$list$3.apply(routes_reverseRouting.scala:761)
    at play.core.Router$HandlerInvoker$$anon$6$$anon$2.invocation(Router.scala:141)
    at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:31)
    at play.core.j.JavaAction$$anon$2.apply(JavaAction.scala:74)
    at play.core.j.JavaAction$$anon$2.apply(JavaAction.scala:73)
    at play.libs.F$Promise$PromiseActor.onReceive(F.java:420)
    at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:159)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425)
    at akka.actor.ActorCell.invoke(ActorCell.scala:386)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230)
    at akka.dispatch.Mailbox.run(Mailbox.scala:212)
    at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:502)
    ... 4 more

请帮助我找到解决方案,或者伪造此测试。

Play似乎在访问模型类的字段时遇到问题(看起来它没有生成getter和setter)。显而易见的解决方案是显式地编写自己的getter(和setter),这样Play就可以在任何情况下找到它们

你能更详细地描述一下这个问题吗?当然。有一个论坛应用程序在开发模式下工作。我有一个index.scala.html,这里是我论坛的部分(它们存储在db中)。当你点击u部分的链接进入url“/topics/1”时,上面的控制器工作(没有错误的请求)。但是当我尝试测试时,由于请求不正确,它失败了。您可以发布由于请求不正确而导致的错误吗?@slowarry您可能应该将您的测试包装在带有
inMemoryDatabase()
伪应用程序中。我通过从BaseControllerTest继承来完成此操作