我有一个依赖于特定文化的单元测试。
在FixtureSetup中,将Thread.CurrentThread.CurrentCulture
和都设置Thread.CurrentThread.CurrentUICulture
为所需的值(en-US)。
当我从Resharper运行测试时,测试通过了。
当我从TeamCity运行测试(使用运行程序“ NUnit 2.4.6”)时,测试失败,因为
CurrentCulture
是cs-CZ
(我的操作系统的文化)。但是CurrentUICulture
还是en-US
。
你可以强制使用特定的区域性在当前线程中运行测试 System.Threading.Thread.CurrentThread
// set CurrentCulture to Invariant
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
// set UI culture to invariant
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
你还可以使用CultureInfo.GetCultureInfo
提供你想要使用的文化。在SetUp
你的测试中,这可能会失败。
切记将文化恢复到上一个文化,TearDown
以确保隔离
[TestFixture]
class MyTest {
CultureInfo savedCulture;
[SetUp]
public void SetUp() {
savedCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
}
[TearDown]
public void TearDown() {
Thread.CurrentThread.CurrentCulture = savedCulture;
}
}
这正是我所做的。在Resharper中运行单元测试时,此功能有效,而在TeamCity中运行单元测试时,则无效。
您如何在TeamCity中运行nUnit?
您是否尝试过使用该
[SetCulture("en-US")]
属性?http://www.nunit.org/index.php?p=setCulture&r=2.5.9您是否尝试过在中定义AssemblyCulture
AssemblyInfo.cs
?[assembly: AssemblyCulture("en-US")]