2013-03-07 2 views
1

다른 문화권의 문자열 입력을 처리 할 때 내 응용 프로그램의 예측 가능성에 대해 우려하고 있습니다. 구형 소프트웨어에서는 문제가되어 왔고 새로운 소프트웨어에서는 문제가되고 싶지 않습니다.문화/세계화 문제에 대한 테스트 설계

나는 일반적으로 두 가지 입력 소스를 가지고 있습니다. 문자열은 WPF 응용 프로그램에 입력되고 스트림은 파일에서로드되어 텍스트를 포함합니다. 이 배양 된 문자열은 일반적으로 나는 그것이 다른 시스템에 입력 된 텍스트를 포함 할 때 몇 가지 논리가 실제로 Result DoSomething(MyModel model);를 처리 할 수 ​​있도록 의미있는 테스트를 설계 할

public struct MyModel 
{ 
    public String Name; 
} 

을 사용하기 전에 모델에 입력됩니다.

하지만 차이점이 중요한 경우 어떻게 표시 할 수 있습니까?

예를 들어 다음과 같은 경우 실패합니다.

var inNativeCulture= "[Something12345678.9:1] {YeS/nO}"; 
var inChineseCulture = inNativeCulture.ToString(new CultureInfo("zh-CN")); 
Assert.That(inChineseCulture, Is.Not.EqualTo(inNativeCulture)); 

[질문]

내가 테스트, 캐릭터 라인은 InvarientCulture로 변환하지 않으면 실패 할 수 DoSomething 있도록 테스트 할 수 있습니다 어떻게

?

나는 괴롭혀 야합니까? 즉, 프랑스어 키보드에 입력 된 Something 문자열은 중국어 키보드에 항상 Something과 일치합니까?

세계화 문제를 완화 할 수있는 방법은 무엇입니까?

답변

3

문자열에서 IFormatProvider를 사용하는 ToString 메서드는 본질적으로 no-op입니다. 문서 상태 : "Returns this instance of String; no actual conversion is performed."

여기에 몇 가지 일반적인 조언이 있습니다. 우선 프론트 엔드 (사용자 향함) 문자열과 백엔드 (데이터베이스, 와이어, 파일 등) 문자열 사이에 명확한 구분을하는 것이 매우 유용합니다. 프론트 엔드 문자열은 사용자의 문화/응용 프로그램 언어에 따라 생성/수용되어야합니다. 이 문자열은 유지되지 않아야합니다 (컴퓨터가 아니라 사람이 읽을 수있는 문서를 생성 할 때와 같은 예외는 거의 없습니다). 백엔드 문자열은 항상 시간이 지남에 따라 변경되지 않는 표준 형식을 사용해야합니다. 전역 화 된 문자열을 생성/구문 분석하는 데 사용되는 데이터가 변경되었다는 사실을 수락하면 사용자가 직면 한 문자열을 유지하지 않도록함으로써 효과와 분리됩니다.