传递给Java的Jstring与预期的不同
我有一个从.c文件传递到java程序的字符串。函数如下所示:传递给Java的Jstring与预期的不同,java,c,eclipse,java-native-interface,Java,C,Eclipse,Java Native Interface,我有一个从.c文件传递到java程序的字符串。函数如下所示: JNIEXPORT jstring JNICALL Java_MyJNI_getName(JNIEnv *env, jobject thisObj) { return (*env)->NewStringUTF(env, "Name"); } 然而,在我的单元测试中,它说“Name”不是返回的内容 /** * test to see if name is retrieved properly */ @Test public
JNIEXPORT jstring JNICALL Java_MyJNI_getName(JNIEnv *env, jobject thisObj) {
return (*env)->NewStringUTF(env, "Name");
}
然而,在我的单元测试中,它说“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>
java.lang.AssertionError:预期相同:不是:
所以我不明白有什么区别。我猜这与空字符或换行符有关,但我无法理解 资产相同(预期,实际)
检查对象是否相同
实例(根据==
运算符)。你明白了吗
错误,因为您比较了字符串的两个不同实例,
虽然两者的内容看起来一样
您可能需要检查这两个字符串是否相等(根据
等于
方法)。要做到这一点,您需要使用
assertEquals(m.getName(), "Name");
检查从文件中读取的名称。你必须“弄清楚”;这就是调试器的用途。读取文件不是单元测试的必要部分,我无意中添加了它。这是一个诚实的错误,但删除该行后错误仍然存在。伯蒂,你是新来此网站的,但当有人回答你的问题并且该问题有效时,请单击该问题左侧的数字进行批准。谢谢,这是错误。现在回想一下,我知道在比较语句中的字符串时.equals()和==之间的区别,但没有对断言应用相同的思想。@Bertie如果答案解决了你的问题,那么接受它。