我在应用程序中测试 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)
}
}
我是一名优秀的程序员,十分优秀!