我正在尝试模拟唱片班
@Test
public void testRecord() {
record Rec(){}
Mockito.mock(Rec.class);
}
Run Code Online (Sandbox Code Playgroud)
但它给出了错误
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class Rec
Mockito cannot mock/spy because :
- final class
at ...
Run Code Online (Sandbox Code Playgroud)
这当然是有道理的。
此问题已在 Gradle 6.6 中修复
我想在测试中放置标志-XX:+ShowCodeDetailsInExceptionMessages以启用有用的 NPE ( https://openjdk.java.net/jeps/358 )
我试过
tasks.withType<Test> {
jvmArgs("-XX:+ShowCodeDetailsInExceptionMessages")
testLogging {
setExceptionFormat("full") // Prints the message of the exception
}
}
Run Code Online (Sandbox Code Playgroud)
但是 NPE 仍然没有消息。
这是我的java版本
java -version
openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+7)
OpenJDK 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
使用更多研究进行编辑
为了更准确地找出问题的根源,我做了更多的工作。我的结论是它不是来自我的 java 也不是测试框架,它只能是 gradle 的错误配置或错误。这是我所做的:
我已经用这个 build.gradle.kts 设置了一个空的 gradle 项目
plugins {
java
}
repositories {
mavenCentral()
}
dependencies {
testImplementation("junit:junit:4.13")
}
tasks.withType<Test> {
jvmArgs("-XX:+ShowCodeDetailsInExceptionMessages") // Helpful …Run Code Online (Sandbox Code Playgroud) 我在 Play 2.6,使用 Java
我的控制器返回:
public Result xml() {
return Results.ok(new ByteArrayInputStream("<someXml />".getBytes()));
}
Run Code Online (Sandbox Code Playgroud)
我想在测试中解析结果:
Result result = new MyController().xml();
play.test.Helpers.contentAsString(result)
Run Code Online (Sandbox Code Playgroud)
这抛出
failed: java.lang.UnsupportedOperationException: Tried to extract body from a non strict HTTP entity without a materializer, use the version of this method that accepts a materializer instead
Run Code Online (Sandbox Code Playgroud)
如何在测试中检索从输入流发出的结果的内容?