2010-11-21 2 views
2

일부 플로우에는 유니 코드 문자로 인한 문제가있었습니다. 그래서 나는 흐름을 수정하고 테스트를 추가했습니다.Junit에서 유니 코드 문자 비교하기

assertEquals("Björk", buyingOption.getArtist()); 

buyingOption.getArtist()는 여기에있는 같은 이름을 반환 코드 조각입니다됩니다

alt text

하지만 JUnit을 메시지와 함께 실패합니다

junit.framework.ComparisonFailure: null 
Expected :Bj?rk 
Actual :Bj?rk 
    at com.delver.update.system.AECSystemTest.basicOperationtsTest1(AECSystemTest.java:40) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 

답변

3

이것은 아마도 Java 소스 파일에 사용 된 기본 인코딩 때문일 수 있습니다. 테스트가 컴파일 될 때 JUnit 소스 코드의 문자열 리터럴에있는 ö은 아마도 다른 것으로 변환 될 것입니다. 내가 Grodriguez에 동의

assertEquals("Bj\u00F6rk", buyingOption.getArtist()); 
2

하지만 UTF-8로 기본 인코딩을 변경할 수를 제안하고 싶습니다 :이 문제를 방지하려면

, 유니 코드 당신의 JUnit 소스 코드에서 문자열 리터럴에 (\uxxxx)를 이스케이프 사용 이런 종류의 문제를 잊어 버려라.

어떻게 하시겠습니까? IDE에 따라 다릅니다. Eclipse에서 예를 들어,/환경 설정 후 "인코딩"을 입력 창으로 이동하여 작업 영역을 선택하고 UTF-8

+0

좋습니다. 다음은 maven junit 또는 컴파일러 플러그인에 대한 몇 가지 구성입니다. – Roman

+0

@Roman - 당신의 Maven pom.xml에서 에디터와 일치하도록 소스 파일의 인코딩을 지정해야합니다. 이렇게하면 모든 환경에서 일관된 컴파일이 보장됩니다. http://docs.codehaus.org/display/MAVENUSER/POM+Element+for+Source+File+Encoding – McDowell

+0

McDowell : 혼자서 작업하거나 최소한 "제어 된"환경에서 작업하는 한 기본 인코딩을 변경하는 것이 좋습니다. . 그러나 모든 사람들이 다른 환경에서 작업 할 수 있기 때문에 팀에 속하면 상황이 더욱 어려워집니다. 원본 파일에서 유니 코드 이스케이프를 사용하는 것은 어리석지 않습니다. 파일 인코딩은 사용하는 편집기/컴파일러/설정에 관계없이 더 이상 중요하지 않습니다. – Grodriguez

2

에 인코딩을 변경 나는 해결책이에 MVN 테스트를

내 수정 프로그램을 실행하기 전에 기본 인코딩을 변경하는 것이었다 발견 실행하기 전에 ENV var JAVA_TOOL_OPTIONS를 설정하는 것이 문제였습니다.

export JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8"  
mvn test