3

我想在我的应用程序中测试文件上传。上传本身的处理方式如http://www.playframework.org/documentation/2.0/JavaFileUpload上的直接文件上传部分所述。

我正在使用最新的 Play20 版本并按照此处所述进行构建。

我当前的代码看起来像这样,但显然缺少向请求添加测试文件的部分:

测试.java

FakeRequest request = fakeRequest(POST, "/measurement/123/file");
// how to append test file to this request?    
Result result = routeAndCall(request);
assertOK(result);

控制器.java

public static uploadFile() {
    RequestBody body = request().body();
    if (body != null) {
        RawBuffer rawBuffer = body.asRaw();
        if (rawBuffer != null) {
            File uploadedFile = rawBuffer.asFile();
            // ...
        }
    }
    return ok();
}
4

2 回答 2

1

我对 Play 2 Java 文件上传测试的解决方案是创建一个 UploadFakeRequest 扩展 FakeRequest。在类里面,我有我自己的 withRawBody 方法,类似这样:

 RawBuffer raw = new RawBuffer(1000, data.getBytes()); // No clue what is the correct value here...
 AnyContentAsRaw content = new AnyContentAsRaw(raw);
 fake = new play.api.test.FakeRequest(POST, fake.path(), new play.api.test.FakeHeaders(Scala.asScala(map)), content, "127.0.0.1");
于 2012-12-03T12:55:09.967 回答
0

根据源代码,FakeRequest 调用的签名是:

case class FakeRequest[A](method: String, uri: String, headers: FakeHeaders, body: A) extends Request[A] 

您应该能够检查将文件上传到应用程序的 POST 请求的主体,并将该主体作为参数复制到测试代码中。另一种方法是根据多部分 POST 上的RFC 描述构建它。

于 2012-04-18T07:54:15.047 回答