我们使用.resx文件将我们的应用程序国际化为多种语言。我们的自动化单元测试是在自己组装的,我们运行MSTEST从命令行项目从我们的CI(詹金斯)这样的范围内:使用mstest,我可以针对每种支持的语言运行我的单元测试套件吗?
mstest.exe /testcontainer:unittests.dll /类别:” !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好主意!我宁愿不执行相同的文件访问之前执行每个测试(给定我们有多少测试),所以我要去尝试ClassInitialize而不是TestInitialize。如果我得到这个工作,我仍然会接受你的答案。 – JeffH
@heginy它看起来像派生类不会执行其父类的ClassInitialize,除非它们从它们自己的ClassInitialize方法显式调用它。派生类*执行*他们的父母的TestInitialize,所以我可以让你的技术以这种方式工作。正如我所说,我不会为将每个测试都发布到文件系统而感到兴奋。我可能会选择ClassInitialize技术,即使除了子类之外还有一个额外的步骤。接受你的答案。谢谢! – JeffH
@JeffH太棒了,很高兴它的工作。你每次都对文件访问是正确的。如果你可以用ClassInitialize解决它,也许AssemblyInitialize也可以工作。 – henginy