5

我们使用 .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“ClassToExtendTestMethodAttribute”:不能从密封类型“Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute”派生

与 TestClassAttribute 相同。

4

1 回答 1

3

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

或者,这里有一个指向“单元测试可扩展性示例”的指针,我没有使用它,但可能会对您有所帮助。

于 2012-06-22T16:45:08.370 回答