小编Łuk*_*ąży的帖子

如何使用RestAssured发送多部分请求?

我有@Controller这样的签名方法:

@PostMapping
@ResponseBody
public ResponseEntity<Result> uploadFileAndReturnJson(@RequestParam("file") MultipartFile file) {}
Run Code Online (Sandbox Code Playgroud)

我想构建多部分请求而无需物理创建任何文件.我尝试这样做:

private MultiPartSpecification getMultiPart() {
    return new MultiPartSpecBuilder("111,222")
            .mimeType(MimeTypeUtils.MULTIPART_FORM_DATA.toString())
            .controlName("file")
            .fileName("file")
            .build();
}

Response response = RestAssured.given(this.spec)
            .auth().basic("admin", "admin")
            .multiPart(getMultiPart())
            .when().post(URL);
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到了回复

所需的请求部分'文件'不存在

我试着看看RestAssured单元测试,看起来我正确地做到了.如果我尝试传递byte []或InputStream而不是String,则抛出异常:

无法使用不可重复的请求实体重试请求.

感谢帮助.

java spring multipartform-data multipart rest-assured

5
推荐指数
1
解决办法
4437
查看次数

Gradle 执行测试的速度非常慢,因为它向套件添加了很多测试

我有大约 8 个端到端测试类,它们扩展了我的抽象SpringContextLoadingTest 类,如下所示:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public abstract class SpringContextLoadingTest extends AbstractTestNGSpringContextTests {
}
Run Code Online (Sandbox Code Playgroud)

我有带有@SpringBootApplication注释的主应用程序类。

当我使用 TestNG 时,我在一组(“通道 A”)中有一些类,在另一组(“通道 B”)有一些类。

我为运行单独的组创建了 gradle 任务:

task runChannelA(type: Test) {
    forkEvery = 1
    useTestNG() {
        includeGroups "channel A"
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有“forEvery = 1”,则在运行超过 1 个测试时会出现端口繁忙的问题。

由于下面这个简单的配置,我从 gradle 任务执行中收到了更详细的输出:

tasks.withType(Test) {
    testLogging.showStandardStreams = true
}
Run Code Online (Sandbox Code Playgroud)

如果没有它,测试执行后,应用程序会在关闭 EntityManagerFactory 时挂起 2 分钟,但此标志显示 gradle 拾取了它没有被要求的测试。对于每个测试,无论它属于哪个组,gradle 都会记录:

Gradle Test Executor 22 STANDARD_OUT
2016-12-21 17:10:00.115  INFO   --- [    Test worker] .b.t.c.SpringBootTestContextBootstrapper …
Run Code Online (Sandbox Code Playgroud)

java testng intellij-idea gradle spring-boot

5
推荐指数
1
解决办法
9302
查看次数

当 ThreadPoolExecutor 提供任务时,SynchronousQueue 不会阻塞

我使用几乎默认的 newCachedThreadPool 但我想限制线程创建,所以我像这样创建 ExecutorService

new ThreadPoolExecutor(0, Runtime.getRuntime().availableProcessors() * 2,
            60L, TimeUnit.SECONDS,
            new SynchronousQueue<>());
Run Code Online (Sandbox Code Playgroud)

阅读 javadocs 后,我期望它的工作方式是,当我提交 Runnable 时,taskExecutor 在向 SynchronousQueue 提供新任务时会阻塞,直到有可用线程来执行它,然后发生切换。不幸的是,在达到线程池容量后并且所有线程都忙时,taskExecutor 会抛出 RejectedExecutionException。我知道我可以传递一个会阻塞的 RejectedExecutionHandler,但我很惊讶似乎我必须这么做。有人可以解释一下它是否真的按预期工作还是我做错了什么?

这段代码重现了我的情况:

public static void main(String[] args) {
    ThreadPoolExecutor executor = new ThreadPoolExecutor(0, Runtime.getRuntime().availableProcessors() * 2,
            60L, TimeUnit.SECONDS,
            new SynchronousQueue<>());

    while (true) {
        executor.submit(() -> System.out.println("bla"));
    }
}
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading

3
推荐指数
1
解决办法
1862
查看次数