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

时间:2010-10-07 11:44:33

标签: c# regex nunit

我有以下测试,旨在确保生成的文件路径具有特定格式。使用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: Expected: String matching "C:\\BaseDir\\d{4}\\[a-zA-Z]{3}\\d{8}" But was: "C:\BaseDir\2010\Oct\20101010"

修改 我实际上已经将测试转换为使用@ChrisF的方法。但问题仍然存在。

3 个答案:

答案 0 :(得分:3)

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

a)更清楚地了解测试的意图和

b)更容易维护。

答案 1 :(得分:2)

@"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

答案 2 :(得分:0)

你有一个额外的方括号!删除它,它应该没问题。