如何测试与特定模式/正则表达式匹配的目录路径?

发布于 2024-09-26 11:26:50 字数 854 浏览 2 评论 0原文

我进行了以下测试,旨在确保生成的文件路径具有特定格式。使用 Nunit 的流畅界面,我该怎么做呢?

我在使用正则表达式时遇到问题。

  [Test]
    public void AssetControlPath_ShouldHaveFormat_BaseDir_YYYY_MMM_YYYYMMMDD() 
    {
        //Arrange
        var baseDir = "C:\\BaseDir";
        var fpBuilder = new FilePathBuilder(new DateTime(2010,10,10), baseDir );

        //Act
        var destinationPath = fpBuilder.AssetControlPath();

        //Assert
        // destinationPath = C:\BasDir\2010\Oct\20101010
    Assert.That(destinationPath, Is.StringMatching(@"C:\\BaseDir\\d{4}\\[a-zA-Z]{3}\\d{8}"));              
    }

单元测试错误 XXX.FilepathBuilderTests.AssetControlPath_ShouldHaveFormat_BaseDir_YYYY_MMM_YYYYMMMDD: 预期:匹配“C:\\BaseDir\\d{4}\\[a-zA-Z]{3}\\d{8}”的字符串 但是是:“C:\BaseDir\2010\Oct\20101010”

编辑: 我实际上已经将测试切换为使用@ChrisF 的方法。然而这个问题仍然存在。

I have the following test which aims to ensure that file path generated is of a specific format. Using Nunit's fluent interfaces, how can I go about this?

I am having trouble with the regex.

  [Test]
    public void AssetControlPath_ShouldHaveFormat_BaseDir_YYYY_MMM_YYYYMMMDD() 
    {
        //Arrange
        var baseDir = "C:\\BaseDir";
        var fpBuilder = new FilePathBuilder(new DateTime(2010,10,10), baseDir );

        //Act
        var destinationPath = fpBuilder.AssetControlPath();

        //Assert
        // destinationPath = C:\BasDir\2010\Oct\20101010
    Assert.That(destinationPath, Is.StringMatching(@"C:\\BaseDir\\d{4}\\[a-zA-Z]{3}\\d{8}"));              
    }

The unit test error
XXX.FilepathBuilderTests.AssetControlPath_ShouldHaveFormat_BaseDir_YYYY_MMM_YYYYMMMDD:
Expected: String matching "C:\\BaseDir\\d{4}\\[a-zA-Z]{3}\\d{8}"
But was: "C:\BaseDir\2010\Oct\20101010"

Edit:
I have actually switched the test to use @ChrisF's approach. The question however still stands.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

纵情客 2024-10-03 11:26:50

\ 作为分割字符的 String.Split,然后检查是否获得了正确的元素数量 (5) 以及每个元素是否为预期值,可能是:

) 更清楚测试的目的,并且

b) 更易于维护。

A String.Split with \ as the split character and then check that you get the right number of elements (5) and that each element is the expected value might be:

a) be clearer in what the intent of the test is and

b) easier to maintain.

冷血 2024-10-03 11:26:50
@"C:\\BaseDir\\d{4}\\[a-zA-Z]{3}]\\d{8}"
//                              /\ extra bracket

另外,您遇到 \ 转义问题,您需要 \\\d{4}\\\d{8},您想要匹配 xxx\20101010 而不是 xxx20101010。以下修复匹配正确:

var str = @"C:\BaseDir\2010\Oct\20101010";
var re = new Regex(@"C:\\BaseDir\\\d{4}\\[a-zA-Z]{3}\\\d{8}", RegexOptions.IgnoreCase);
var result = re.IsMatch(str); // true
@"C:\\BaseDir\\d{4}\\[a-zA-Z]{3}]\\d{8}"
//                              /\ extra bracket

Also you have a problem with \ escaping, you need \\\d{4} and \\\d{8}, you want to match xxx\20101010 and not xxx20101010. The following fix matches correct:

var str = @"C:\BaseDir\2010\Oct\20101010";
var re = new Regex(@"C:\\BaseDir\\\d{4}\\[a-zA-Z]{3}\\\d{8}", RegexOptions.IgnoreCase);
var result = re.IsMatch(str); // true
月朦胧 2024-10-03 11:26:50

你有一个额外的右方括号!把它去掉就可以了。

You have an extra closing square bracket!! remove that and it chould be fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文