我有@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,则抛出异常:
无法使用不可重复的请求实体重试请求.
感谢帮助.
我有大约 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) 我使用几乎默认的 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 ×3
concurrency ×1
gradle ×1
multipart ×1
rest-assured ×1
spring ×1
spring-boot ×1
testng ×1