【问题标题】:Jstring passed to Java is different to what is expected传递给 Java 的 Jstring 与预期不同
【发布时间】:2017-09-13 05:12:33
【问题描述】:

我有一个字符串从 .c 文件传递​​到 java 程序。函数如下所示:

JNIEXPORT jstring JNICALL Java_MyJNI_getName(JNIEnv *env, jobject thisObj) {
return (*env)->NewStringUTF(env, "Name");

}

但是,在我的单元测试中,它说“名称”不是返回的内容。

/**
 * test to see if name is retrieved properly
 */
@Test
public void getNameTest1(){
    MyJNI m = new MyJNI();
    assertSame(m.getName(), "Name");
}

这个测试给出了这个错误信息:

java.lang.AssertionError: expected same: <Name> was not:<Name>

所以我不明白有什么区别。我猜这与空字符或换行符有关,但我无法弄清楚。

【问题讨论】:

  • 检查从文件中读取的名称。你必须“弄清楚”;这就是调试器的用途。
  • 读取的文件不是单元测试的必要部分,我不小心添加了它。一个诚实的错误,但删除该行后错误仍然存​​在
  • Berti,你是这个网站的新手,但是当有人回答你的问题并且它有效时,然后点击它左边的数字来批准它。

标签: java c eclipse java-native-interface


【解决方案1】:

assertSame(expected, actual) 检查对象是否相同 实例(根据== 运算符)。你得到了断言 错误,因为您比较了 String 的 2 个不同实例, 虽然两者都具有相同的内容。

您可能想检查 2 个字符串是否相等(根据 equals 方法)。为此,您需要使用

assertEquals(m.getName(), "Name");

【讨论】:

  • 谢谢,这是个错误。现在想来,在比较语句中的字符串时,我知道 .equals() 和 == 之间的区别,但没有将相同的想法应用于断言。
  • @Bertie 如果答案解决了您的问题,请接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 2019-11-13
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多