- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Graal 上编写一个应用程序,它将能够执行不同语言的小脚本。
我正在尝试为我用来将 Context.eval() 调用(类型:Value)的结果转换/处理为 Java 对象的类编写一些单元测试。我从文档中知道一个 Value 实例总是绑定(bind)到一个上下文,所以当我尝试写这样的东西时:
@Test
public void NumericFloatTest() throws ScriptExecutionException {
GuestLanguageResultProcessor LangProcessor = new GuestLanguageResultProcessor();
Float javaValue = (float) 43.25;
Value numValue = Value.asValue(javaValue);
LangProcessor.processResult(numValue);
Object result = LangProcessor.processResult(numValue);
assertThat(result.getClass()).isEqualTo(Float.class);
}
我收到以下错误:
java.lang.IllegalStateException: No current context is available. Make sure the Java method is invoked by a Graal guest language or a context is entered using Context.enter().
我想从概念上讲,拥有一个没有关联的访客代码位的“值”实例是没有意义的,所以我的问题是:
如何着手测试我的 GuestLanguageResultProcessor 类?我是否必须通过创建上下文来“膨胀”我的单元测试?
专家的附带问题:我还使用此类 (GuestLanguageResultProcessor) 从多语言值实例中提取 Java 值,以便我可以关闭上下文。换句话说,在我看来,在能够执行 Context.close() 之前,我需要调用 [value instance].asString() 或 .asWhatever() 才能得到结果并能够在不关闭上下文的情况下关闭上下文如 docs 中所述获得 IllegalStateException .
我做的对吗?有没有更好的方法来处理获取结果和安全关闭上下文?
谢谢!
最佳答案
How can I go about testing my GuestLanguageResultProcessor class? Do I have to "bloat" my unit test with the creation of a context?
我担心有点腹胀是必要的。我建议使用以下代码来使您的测试工作。这也可以在测试基类中完成,以避免重复。
Context context;
@Before
public void setup() {
context = Context.create();
context.enter();
}
@After
public void setup() {
context.leave();
context.close();
}
@Test
public void NumericFloatTest() throws ScriptExecutionException {
GuestLanguageResultProcessor LangProcessor = new GuestLanguageResultProcessor();
Float javaValue = (float) 43.25;
Value numValue = Value.asValue(javaValue);
LangProcessor.processResult(numValue);
Object result = LangProcessor.processResult(numValue);
assertThat(result.getClass()).isEqualTo(Float.class);
}
Am I doing it right? Is there a better way to handle getting the result and closing the context safely?
值实例可能会绑定(bind)到 guest 语言对象,例如 JavaScript 对象,一旦上下文关闭,这些对象就会失效。并非总是可以将客户语言对象转换为永久性 Java 表示。例如,多语言值可能指的是整个 JavaScript 对象图。
如果可能,我建议只要需要值就保持上下文打开,因为它不需要任何转换。
如果那是不可能的,并且您只处理基元和数组,您可以尝试使用以下方法。您还可以尝试通过访问其成员将对象复制到 Java 领域。
Object copyToJavaLand(Value value) {
if (value.isBoolean()) {
return value.asBoolean();
} else if (value.isString()) {
return value.asString();
} else if (value.isNumber()) {
return value.as(Number.class);
} else if (value.isHostObject()) {
return value.asHostObject();
} else if (value.isProxyObject()) {
return value.asProxyObject();
} else if (value.hasArrayElements()) {
Object[] array = new Object[(int) value.getArraySize()];
for (int i = 0; i < array.length; i++) {
array[i] = copyToJavaLand(value.getArrayElement(i));
}
return array;
}
throw new IllegalArgumentException("Cannot copy value " + value + ".");
}
请注意,此方法并不总是安全的。例如,如果数组引用自身,此方法将因堆栈溢出错误而崩溃。
关于GraalVM - 在没有上下文的情况下使用多语言值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51669154/
是否可以在 reflection-config.json 中添加一个包?像这样的东西: [ { "name" : "org.apache.tinkerpop.shaded.kryo.ser
GraalVM 有许多令人惊讶的功能。但是我还没有看到但很想看到的一件事是能够在浏览器中运行 GraalVM 应用程序。像这样的来源 (Top 10 Things To Do With GraalVM
在 GraalVM 架构上实现编程语言有哪些(架构)差异 - 特别是使用 Sulong 的 Graal、Truffle 和 LLVM 之间? 我计划在 GraalVM 架构上重新实现现有的静态类型编程
如何控制使用 GraalVM native-image 创建的原生图像的堆大小? native 图像是否评估通常的 JVM -Xmx 参数? 最佳答案 您可以使用 -Xmx{n} 命令行参数指定堆大小
GitHub 上的 Substrate VM 文档(例如 CONFIGURE.md 提到了多个 -H:... 选项,例如 -H:ReflectionConfigurationResources 或 -
是否有任何方法可以将 javascript 源代码转换为某种预编译的声明,可以以某种方式存储并加载到 org.graalvm.polyglot.Context 而不是将其作为原始字符串进行评估?类似于
我有一个小 Java 程序。我使用 Graal 的 native-image 构建了一个二进制文件(即 GraalVM AOT 又名 SubstrateVM)。 我的程序可以使用 Java 运行时或本
我正在尝试使用 GraalVM 和 native 图像构建 native 应用程序。开始构建过程时发生错误。类路径中似乎缺少 cl.exe。就像 GraalVM 网站上提到的那样,我已经安装了“GRM
我知道这些技术都是相关的,但有人可以解释一下每种技术的用途以及它们如何组合在一起吗? 最佳答案 简单化: 格拉尔 - Java 字节码编译器。可以及时(作为 JVM 的一部分)或提前使用。 Subst
我为使用动态编程找出最长公共(public)子序列的方法创建了一个基准: @Benchmark def longestCommonSubsequenceDP(): String = { v
我有一个在 java-8-openjdk-amd64 上运行的 java 应用程序,它评估 java 脚本。现在我安装了 GraalVM Community Edition graalvm-ce-19
我正在尝试编译示例 Quarkus使用 GraalVM 和 Maven 项目到 native 镜像。这是我的 Quarkus 服务的代码: package gk.testquarkus; import
我正在 Graal 上编写一个应用程序,它将能够执行不同语言的小脚本。 我正在尝试为我用来将 Context.eval() 调用(类型:Value)的结果转换/处理为 Java 对象的类编写一些单元测
我正在尝试使用 Graalvm 构建 native 图像,但每次我尝试使用 mvn gluonfx:build 构建它时都会出现错误,项目中有数据库连接,例如:H2 DB。 正常运行即可 没有任何数据
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 2 年前。
我正在尝试使用 Micronaut 应用程序作为发现的 Graalvm native 镜像 here. 但是当我运行 ./gradlew buildNativeLambda 时我有这些异常(excep
我正在使用 GraalVM 执行 JavaScript 文件,但在异常处理方面遇到问题。我的 JS 代码会回调 Java,如果这些 Java 方法之一抛出异常,那么我就会丢失原因链。 public c
我正在尝试在项目中使用 GraalVM 来添加简单的脚本功能。我使用 Maven 进行依赖项管理来加载 Graal 的基本依赖项。这是我的 pom.xml: 4.0.0 cx.matthe
嗨,我一直在尝试对我的 javafx 项目进行 native 构建,但当我尝试运行它时出现异常。我怀疑在编译的二进制文件中找不到 .fxml 文件 Exception in thread "main"
环顾四周,皆是对手! 云时代的掉队者,由于Java启动的高延时、对资源的高占用、导致在Serverless及FaaS架构下力不从心,在越来越流行的边缘计算、IoT方向上也是难觅踪影;
我是一名优秀的程序员,十分优秀!