2012-08-30 6 views
3

Android 앱에서 현지화를위한 단위 테스트를하고 있습니다. 현재 단위 테스트는 모든 다른 로케일에 대해 서로 다른 모든 형식 문자열을 검사하여 번역자가 실수를 저 지르지 않았는지 확인합니다. 기본적으로 String.format()을 호출하면 형식 예외가 throw되지 않습니다.형식 문자열 (String.format()/Formatter)을 사용하면 예상되는 인수 형식을 쉽게 얻을 수 있습니까?

유일한 단점은 모든 문자열을 수동으로 테스트에 추가해야한다는 것입니다. R.string의 모든 문자열을 찾기 위해 리플렉션을 사용하는 대체 테스트를하고 있습니다. 문자열을 가져 오는 것은 문제가되지 않지만 형식 문자열이 예상하는 인수의 수와 유형을 결정하는 쉬운 방법이 있습니까?

너무 많은 인수를 전달하면 String.format()이 불만하지 않아서 정수 배열 (% d 또는())을 (를) % s에 적용 할 수있는 큰 배열을 전달할 수 있습니다. 형식 예외를 찾으십시오. 그래도 올바른 유형의 인수를 올바른 값으로 전달할 수 있다면 조금 더 좋을 것입니다.

+0

FindBugs에는이 경우에 유용한 검사기가 있습니다. – bestsss

+0

형식 문자열은 다양한 Android XML 파일에 모두 정의되어 있으므로 FindBugs가이 경우 나를 도울 수 있다고 생각하지 않습니다. –

답변

1

정직하게 말하자면, Exception을 확인하는 방법이 가장 좋은 방법이라고 생각합니다. 자신 만의 본격적인 파서.

the format(...) method of Formatter.java (앵커는 찾을 수 없으므로 + f format(Lo을 제어해야 함)에서 모든 요소 (인수가 올 것임)를 찾는 코드를 작성하는 데 관심이 있다면 그것). 이 코드는 sources\android-16\java\util 아래의 SDK에서 개인 방법 doFormat으로 사용할 수 있습니다.

각 섹션을 찾고 구문 분석하는 데 사용하는 방법을 배우면 실제로는 비교적 간단한 코드입니다. 약간의 작업을하고 아마도 Formatter의 복사 - 붙여 넣기 비트로 생각한다면, 대신에 String의 요소를 찾아내는 코드를 직접 설정할 수 있습니다.

+0

고마워요. 나는 그것을하는 유일한 방법 일 것이 아닌가 걱정했다. Formatter를 기반으로하는 파서를 구현하는 것은 간단한 단위 테스트에 과도하다고 생각하기 때문에 예외를 확인하는 방법을 고수 할 것입니다. 나는 앱이 프로덕션에서 임의의 언어로 충돌하지 않도록 정말로 관심이 있습니다. –

+1

모든 로케일에 제공된 문자열이있는 한 괜찮습니다. 일부 문자열이 예외를 throw하는 이벤트에서 기본 문자열을 선택하는 것이 좋습니다. – Eric

+0

우리는 strings.xml에있는 모든 문자열을 가지고 있으므로 주어진 로케일에 대해 누락 된 문자열이 있다면 그 값으로 다시 떨어집니다. 그러나 예외가 발생했을 때 기본 문자열을 선택하는 것은 좋은 생각입니다. 감사! –