gpt4 book ai didi

java - Playframework 2.6 [Java] : How to test a controller

转载 作者:太空宇宙 更新时间:2023-11-04 10:41:10 27 4
gpt4 key购买 nike

我在应用程序中测试 Controller 时遇到问题。

首先,我有一个 Person 类:

public class Person extends Model {

@Id
public UUID id;
public static final Finder<UUID , Person> find = new Finder<>(Person.class);

@Constraints.Required
@Constraints.MinLength(0)
@Constraints.MaxLength(25)
public String name;

@Constraints.Required
@Constraints.MinLength(0)
@Constraints.MaxLength(25)
public String lastname;

@Constraints.Required
@Constraints.Min(0)
public int age;

@OneToMany(mappedBy = "person")
List<ArticleVersion> version = new ArrayList<>();

}

然后我的 PersonController 在类的主体中使用 @inject :

public class PersonController extends Controller {


public FormFactory formFactory = null;

@Inject
public PersonController(FormFactory formFactory) {
this.formFactory = formFactory;
}


public Result createPerson(){
final Form<Person> form = formFactory.form(Person.class).bindFromRequest();
if (form.hasErrors()) {
return badRequest(form.errorsAsJson());
}

Person person = form.get();
person.save();

return created(Json.toJson(person));

}

public Result getPerson(String id){
Person person = Person.find.byId(UUID.fromString(id));
if (person == null) {
return notFound("Person not found");
}

return ok(Json.toJson(person));
}
}

我想测试例如 createPerson 方法,但我不知道应该使用哪种测试方法以及如何使用。我尝试查看 Play Framework 网站上的一些教程,但它对我没有多大帮助。任何帮助将不胜感激。

最佳答案

我使用 Scala 特征来测试 scalatest 中的 Controller 。

import java.util

import com.fasterxml.jackson.databind.JsonNode
import org.scalatest.FlatSpec
import org.scalatestplus.play.guice.GuiceOneAppPerSuite
import play.mvc.{Http, Result}
import play.test.Helpers

/**
* Access the Play server as an API using HTTP requests over a test server.
*/
trait APIServer extends FlatSpec with GuiceOneAppPerSuite
{
/**
* Track session values.
*/
var session: Http.Session = new Http.Session(new util.HashMap[String, String]())

/**
* Execute a request to the server.
*
* @param uri The path of the request
* @param method The HTTP method
* @param request The request data as JsonNode
* @return The result as a Play Result object
*/
def request(uri: String, method: String, request: Option[JsonNode]): Result =
{
val req: Http.RequestBuilder = Helpers.fakeRequest(method, uri).session(session)

if (request.isDefined)
{
req.bodyJson(request.get)
}

Helpers.route(this.app.asJava, req)
}

}

关于java - Playframework 2.6 [Java] : How to test a controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com