使用mstest,我可以针对我支持的每种语言运行单元测试套件吗?

时间:2012-06-22 16:11:23

标签: .net unit-testing internationalization continuous-integration mstest

我们使用.resx文件将我们的应用程序国际化为多种语言。我们的自动化单元测试在他们自己的程序集中,我们在CI(Jenkins)的命令行中对该项目运行mstest,如下所示:

  

mstest.exe /testcontainer:unittests.dll / category:"!TemporaryExclude" /resultsfile:UnitTests.trx

我们发现如果在设置为我们的非英语支持文化的计算机上运行,​​特定单元测试将失败的情况。我们希望我们的CI对每种文化进行单元测试,包括当前的en-us。这一定是其他人遇到的问题,但我还没有发现任何问题。

有没有办法针对特定文化运行mstest?我在the command-line docs for mstest.exe

中看不到任何内容

我知道我可以在测试中指定Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture,但我不希望我们团队中的开发人员必须复制粘贴他们的测试副本,每个文化。这对他们来说是额外的工作,只有文化不同的复制品很难维护,容易出错。

我想知道从TestMethodAttribute派生一个类并让它循环遍历我所有的语言资源DLL,每个运行一次测试代码,但Visual Studio告诉我:

  

错误2' ClassToExtendTestMethodAttribute':   不能从密封类型派生出Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute'

与TestClassAttribute相同。

1 个答案:

答案 0 :(得分:3)

一个想法可能是从TestInitialize方法中的配置文件中读取文化以便与Thread.CurrentThread.CurrentCulture一起使用,并将此方法放入基本单元测试类(所有其他测试类)应该来自)。 如果这样做,您可以在循环中从批处理文件中调用mstest并更改配置文件(从" en-us"到" fr-FR" for例子)每一步之后。

或者,这是指向" Unit Test Extensibility Sample"的指针。我没有使用过,但可能对你有帮助。