C# 为自动测试中启动的程序设置CurrentUICulture
我目前正在为C#(WPF)应用程序的自动化(灰盒)UI测试设置CurrentUICulture。UI测试是在步骤中使用SpecFlow针对测试用例和FlaUI针对UI自动化执行的。因此,这不是关于如何从应用程序内部设置C# 为自动测试中启动的程序设置CurrentUICulture,c#,localization,automated-tests,C#,Localization,Automated Tests,我目前正在为C#(WPF)应用程序的自动化(灰盒)UI测试设置CurrentUICulture。UI测试是在步骤中使用SpecFlow针对测试用例和FlaUI针对UI自动化执行的。因此,这不是关于如何从应用程序内部设置CurrentUICulture,而是从外部设置 不幸的是,我的研究状况让我认为,为我正在启动的C#应用程序设置UI文化几乎是不可能的,但我希望有一个微弱的机会,有人知道实现这一点的方法 我在这里读到了一些答案,其中指出我们可以在PowerShell控制台中设置CurrentUIC
CurrentUICulture
,而是从外部设置
不幸的是,我的研究状况让我认为,为我正在启动的C#应用程序设置UI文化几乎是不可能的,但我希望有一个微弱的机会,有人知道实现这一点的方法
我在这里读到了一些答案,其中指出我们可以在PowerShell控制台中设置CurrentUICulture
,语言(或区域设置)将传播到此PowerShell会话启动的内容,但这似乎仅适用于cmdlet,而不适用于从该PowerShell会话启动的应用程序,这可能是有意义的。我确认这适用于通过Process.Start
启动的应用程序,从另一个应用程序设置了CurrentUICulture
。由于FlaUI
似乎也使用Process.Start
(FlaUIApplication.Launch
使用ProcessStartInfo
,该对象让我认为它使用了Process.Start
,但我没有确认这一点),因此我假设行为将是相同的。此外,不可能将区域设置传递给进程。直接启动
我甚至尝试在调用程序进行测试的程序中设置Thread.CurrentUICulture
和CultureInfo.DefaultThreadCurrentUICulture
,但都没有效果
我知道全局设置Windows UI语言需要重新启动才能使更改生效,这就排除了自动测试的可能性。即使设置另一个用户并以该用户的身份运行该程序似乎也没有帮助。该用户的区域性设置(CultureInfo.CurrentCulture
)会传递给软件,但语言(CultureInfo.CurrentUICulture
)不会
CurrentCulture
可以在会话中设置,我可以使用它来确定使用哪种语言,但这感觉像是我想要避免的黑客行为。是否有其他方法来设置程序运行的语言?是否是“您的”WPF应用程序?为什么不引入一个命令行参数来覆盖区域性?在许多方面都很方便ways@Klamsi当然,我们可以为测试引入一种变通方法,但我们不会测试我们的应用程序在现实世界中是如何调用的,这会使我们的测试变得毫无用处(我们的本地化本身已经被证明,但基于CurrentUICulture
选择语言是新的,因此需要测试)嗯,因为你不能同时拥有一个包含所有文化的操作系统,你永远无法测试“真实世界”。如果您将“当前文化”设置为依赖于现有参数,我认为您是非常安全的。什么会出错?