gpt4 book ai didi

c# - 匹配 TestMethods 的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:24 25 4
gpt4 key购买 nike

对于我们的应用程序,我们有大约 4000 个单元测试,如果我们将您的代码 checkin tfs,这些单元测试将自动执行。

我们在 Build-Definition 中做了很多更改,因此现在要求所有单元测试必须具有属性 [TestCategory(TestCategories.GatedCheckin)] 才能在 gated- 中执行签到。

不幸的是,4000 个单元测试中只有 700 个已经具有此属性。现在我必须将该属性添加到剩余的单元测试中。

为此,我编写了一个小型 VisualStudio-Extension,我可以在其中打开源文件并搜索以下正则表达式:

^([\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()
{...}

但是对于还包含另一个属性的单元测试,例如:

[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void ThrowOnInputTooLongTest2()
{...}

正则表达式不起作用。

我如何修改正则表达式,使其匹配所有具有 [TestMethod] 属性而不是 [TestCategory(TestCategories.GatedCheckin)] 的单元测试

>

我想过使用 ?! 进行负面前瞻,但我没有让它工作。

有什么想法吗?


我修改了 Addison 提供的解决方案,使其看起来像:

^[\t ]*\[TestMethod\][ \t\w\/äÄüÜöÖß]*(\n([ \t]*)\[(?!TestCategory\(TestCategories\.GatedCheckin\)).+\][ \t\w\/äÄüÜöÖß]*)?\s+public

如果我在 regex101 中使用它,它就可以正常工作,如您所见 here

但是如果我在 c# 中使用这个正则表达式:

string content = File.ReadAllText(file);    
Regex regex = new Regex(pattern, RegexOptions.Multiline);
int matchCount = regex.Matches(content).Count;

我只得到 2 个匹配项。

最佳答案

好问题!

我设法做到了这一点:

^[\t ]*\[TestMethod\][ \t\w\/äÄüÜöÖß]*(\n\[(?!TestCategory\(TestCategories\.GatedCheckin\)).+\][ \t\w\/äÄüÜöÖß]*)*\s+public

我添加了另一个捕获字段(并简化了正则表达式的其余部分),以便它现在在第一个 [TestMethod] 之后检查任意数量的其他 [] , 当且仅当它们都不是 [TestCategory(TestCategories.GatedCheckin)] 时才会接受它们。

Test it online

这里有一些 C# 代码可以做到这一点:

using System;
using System.Text.RegularExpressions;

namespace Programming {
class Program {
static void Main() {
string content = "namespace MyNameSpace1\n{\n [TestClass]\n public class GetMapPathActionTests\n {\n [TestMethod] // 1\n public void GetMapPath_with_All_Attibutes()\n {\n ...\n }\n [TestMethod] // 2\n [ExpectedException(typeof(DBInstallInfoConverterCrossCheckerRequiredChildNotFoundException))]\n public void GetMapPath_with_Empty_Input()\n {\n \n }\n [TestMethod] // 3\n [ExpectedException(typeof(DBInstallInfoConverterCrossCheckerRequiredChildNotFoundException))]\n public void GetMapPath_with_Empty_Output()\n {\n \n }\n [TestMethod] // 4\n public void GetMapPath_with_Empty()\n {\n \n }\n [TestMethod] // 5\n [ExpectedException(typeof(DBInstallInfoConverterCrossCheckerRequiredChildNotFoundException))]\n public void GetMapPath_with_All_Attibutes_Empty()\n {\n \n }\n }\n}\n";
Regex regex = new Regex(@"^[\t ]*\[TestMethod\][ \t\w\/äÄüÜöÖß]*(\s+\[(?!TestCategory\(TestCategories\.GatedCheckin\)).+\][ \t\w\/äÄüÜöÖß]*)?\s+public", RegexOptions.Multiline);
MatchCollection matches = regex.Matches(content);

foreach (Match match in matches) {
foreach (Capture capture in match.Captures) {
Console.WriteLine(capture.Value);
}
}
}
}
}

关于c# - 匹配 TestMethods 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54205733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com