我在应用程序中测试控制器时遇到问题。
首先,我有一个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网站上的一些教程,但它对我帮助不大。任何帮助将不胜感激。
答案 0 :(得分:0)
我使用Scala特性在scalatest中测试控制器。
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)
}
}
答案 1 :(得分:0)
使用Play Test Helpers,您可以用这种方式测试整个路线:
import org.junit.Test;
import play.test.TestBrowser;
import static play.test.Helpers.*;
public class IntegrationTest
{
@Test
public void test(){
running(fakeApplication(inMemoryDatabase()), () -> {
final TestBrowser testBrowser = testBrowser();
testBrowser.goTo("/api/call/");
assert(testBrowser.pageSource().equals("API response"));
});
}
}