4

フランス語と英語をサポートする必要があるプロジェクトがあります。すべての文字列をリソース ファイルに入れました。Visual Studio でプログラムをデバッグすると、フランス語でプログラムを正常に表示できます。ただし、プログラムのテストを実行すると、プログラムは英語に戻ります。フランスのリソース dll ファイルを配置に追加しました。これにより、個々の単体テストをフランス語でデバッグできますが、[テスト] -> [デバッグ] -> [ソリューション内のすべてのテスト] をクリックすると、プログラムは英語で実行されます。

[DeploymentItem(@"..\bin\x86\Release\fr", "fr-FR")] もテストの 1 つに追加しようとしましたが、これは役に立ちませんでした。これを修正する方法について何か提案はありますか? ありがとう!

4

2 に答える 2

6

次のような using ステートメントで言語テストをラップします。

[Test]
public void Loads_correct_labels_from_language()
{
    using(new LanguageSwitchContext("fr"))
    {
       var okayString = MyResources.Okay_Button;
       Assert.Equals("your localized string here", okayString);
    }
}

public class LanguageSwitchContext : IDisposable
{
    public CultureInfo PreviousLanguage { get; private set; }

    public LanguageSwitchContext(CultureInfo culture) 
    {
        PreviousLanguage = System.Threading.Thread.CurrentThread.CurrentCulture;
        System.Threading.Thread.CurrentThread.CurrentCulture = culture;
    }

    public LanguageSwitchContext(string language) 
    {
        //create culture from language
    }

    public void Dispose() 
    {
        System.Threading.CurrentThread.CurrentCulture = PreviousCulture;
    }
}
于 2012-07-10T03:55:32.313 に答える
6

ここには 2 つの潜在的な問題があります。

  1. テストの実行時に、テストCurrentUICultureしたい言語に設定されていない可能性があります
  2. サテライト アセンブリ (この例ではフランス語のみ) は、単体テスト環境に展開されない場合があります。ResourceManager は、UI カルチャに一致するサテライト アセンブリを見つけられない場合、プロジェクトの DLL 自体に埋め込まれた基本言語に既定で設定されます (したがって、基本言語であると仮定すると、英語になります)。

System.Threading.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");1.の場合、テストまたはテストクラスの初期化で必ず設定できます。

2.については、DeploymentItemAttributeあなたが言及したような a の使用が機能するはずです。フランス語でアプリを正常に実行したときにデプロイされたサテライト アセンブリが、同じ名前でテストのデプロイの同じサブフォルダーにコピーされることを確認してください。それはおそらくもっと似たものです[DeploymentItem(@"bin\fr-FR", "fr-FR")]

于 2012-07-11T20:23:09.580 に答える