对于我们的应用程序,我们有大约4000个单元测试,如果我们将代码签入到TFS,这些测试将自动执行。
我们在构建定义上已经改变了很多,所以现在要求所有单元测试都必须具有属性
[TestCategory(TestCategories.GatedCheckin)]
在封闭签入中执行。
不幸的是,4000个单元中只有700个单元测试具有此属性。现在我必须将属性添加到其余的单元测试中。
因此,我编写了一个小的VisualStudio扩展名,可以在其中打开源文件并搜索以下正则表达式:
^([\t]|[ ])*\[TestMethod\]([\t]|[ ]|[\w\/äÃüÃöÃÃ])*([\r\n]+)([\t]|[ ])*public
这个正则表达式对单元测试很有用,比如:
[TestMethod]
public void PathIsValidTest1()
{...}
或
[TestMethod] // another test
public void Calculator_Add_3_And_3_Equals_6_Test()
{...}
但对于还包含其他属性的UnitTest,例如:
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void ThrowOnInputTooLongTest2()
{...}
正则表达式不起作用。
如何修改正则表达式,使其与
[TestMethod]
属性而不是
[测试类别(testcategories.gatedcheckin)]
我想到了一个消极的展望
?!
但我没有让它工作。
有什么想法吗?
我已经修改了Addison提供的解决方案,因此它看起来像:
^[\t ]*\[TestMethod\][ \t\w\/äÃüÃöÃÃ]*(\n([ \t]*)\[(?!TestCategory\(TestCategories\.GatedCheckin\)).+\][ \t\w\/äÃüÃöÃÃ]*)?\s+public
如果我在Regex101中使用这个,它会很好地工作,正如你所看到的。
here
但是,如果我在C中使用这个regex的话:
string content = File.ReadAllText(file);
Regex regex = new Regex(pattern, RegexOptions.Multiline);
int matchCount = regex.Matches(content).Count;
我只有两场比赛。