2017-04-17 5 views
0

.c 파일에서 Java 프로그램으로 전달되는 문자열이 있습니다. 이 함수는 다음과 같습니다 :Jstring이 Java로 전달 된 것이 예상과 다릅니다.

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

} 

그러나 내 단위 테스트에서는 "이름"이 반환되지 않습니다.

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

그래서 나는 그 차이가 무엇인지 이해가 안 :

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

이 테스트는이 오류 메시지를 제공합니다. 나는 그것이 null 문자 또는 줄 바꿈과 관련이 있다고 추측하고 있지만 그것을 이해할 수는 없다. 객체가 동일한 인스턴스이다

+0

파일에서 읽은 이름을 확인하십시오. 당신은 "그것을 알아낼"필요가 있습니다. 그것이 바로 디버거입니다. –

+0

읽기 파일은 단위 테스트의 필수 부분이 아니 었습니다. 실수로 추가했습니다. 정직한 실수이지만 그 줄을 삭제 한 후에도 오류가 여전히 남아 있습니다. – Bertie

+1

Berti,이 사이트를 처음 접했을 때 누군가 질문에 답변하고 작동하면 왼쪽에있는 번호를 클릭하여 승인하십시오. –

답변

1

assertSame(expected, actual) 있는지 체크합니다 (== 조작에 따라). 당신은 String, 의 두 개의 서로 다른 인스턴스를 동일하게 보이는 내용과 비교 했으므로 어설 션 오류가 발생했습니다.

당신은 아마 2 개 문자열 ( equals 방법에 따라) 동일한입니다 있는지 확인합니다. 이렇게하려면 사용해야합니다

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

고마워요, 이것은 실수였습니다. 지금 생각해 보면, 문에서 문자열을 비교할 때 .equals()와 ==의 차이를 알았지 만 어설 션에 동일한 생각을 적용하지 않았습니다. – Bertie

+0

@Bertie 답변으로 문제가 해결되면 수락하십시오. – manuell

관련 문제