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



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

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

我们发现,如果在设置为非英语支持的区域性之一的计算机上运行,特定单元测试将失败。我们希望 CI 针对每种区域性(包括当前的 en-us 区域性)运行单元测试。这一定是其他人遇到过的问题,但我没有发现任何东西。

有没有办法针对特定区域性运行 mstest?我在 mstest 的命令行文档中没有看到任何内容.exe

我知道我可以在我的测试中指定 Thread.CurrentThread.CurrentCulture 和 Thread.CurrentThread.CurrentUICulture,但我不希望我们团队中的开发人员必须复制粘贴他们测试的副本,每个区域性一个。这对他们来说将是额外的工作,并且仅因文化而异的重复项将难以维护且容易出错。

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

错误 2 "类到扩展测试方法属性": 无法从密封类型"Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute"派生

TestClassAttribute 也是如此。

一个想法可能是从 TestInitialize 方法中的配置文件中读取区域性以便与 Thread.CurrentThread.CurrentCulture 一起使用,并将此方法放入基本单元测试类(所有其他测试类都应从中派生)。如果这样做可以解决问题,则可以在循环中从批处理文件调用mstest,并在每个步骤后更改配置文件(例如,从"en-us"更改为"fr-FR")。

或者,下面是指向"单元测试扩展性示例"的指针,我没有使用过,但可能会对您有所帮助。

最新更新