C# 如何测试与特定模式/regex匹配的目录路径?
我有以下测试,旨在确保生成的文件路径是特定格式的。使用Nunit流畅的界面,我该怎么做 我的正则表达式有问题C# 如何测试与特定模式/regex匹配的目录路径?,c#,regex,nunit,C#,Regex,Nunit,我有以下测试,旨在确保生成的文件路径是特定格式的。使用Nunit流畅的界面,我该怎么做 我的正则表达式有问题 [Test] public void AssetControlPath_ShouldHaveFormat_BaseDir_YYYY_MMM_YYYYMMMDD() { //Arrange var baseDir = "C:\\BaseDir"; var fpBuilder = new FilePathBuilder(n
[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.AssetControl路径\u应保存格式\u BaseDir\u YYYY\u MMM\u yyyyymmmdd:
应为:字符串匹配“C:\\BaseDir\\d{4}\\[a-zA-Z]{3}\\d{8}”
但是是:“C:\BaseDir\2010\Oct\20101010”
编辑:
实际上,我已经将测试转换为使用@ChrisF的方法。但问题仍然存在。您还有一个额外的结束方括号!!拆下它就可以了。你有一个额外的封闭方括号!!删除它,它会很好。一个
字符串。使用\
作为拆分字符拆分,然后检查元素数(5)是否正确,每个元素是否为预期值:
a) 更清楚测试的目的是什么,以及
b) 易于维护。一个字符串。使用\
作为拆分字符拆分,然后检查您是否获得了正确的元素数(5),并且每个元素都是预期值,可能是:
@"C:\\BaseDir\\d{4}\\[a-zA-Z]{3}]\\d{8}"
// /\ extra bracket
a) 更清楚测试的目的是什么,以及
b) 易于维护
@"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
另外,您在\
转义方面也有问题,您需要\\\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}”可能就是您所需要的。@SWeko-它在测试上面的注释中。“一开始我也错过了。”斯维科-试过这个和其他一些组合。不起作用。错误是发布的,除了字符串匹配
部分少了一个“\`BTW,如果您使用@符号作为字符串文字,则不需要转义反斜杠,因此@“C:\BaseDir\d{4}\[a-zA-Z]{3}]\d{8}”可能是您需要的。@SWeko-它在测试上面的注释中。“一开始我也错过了。”斯维科-试过这个和其他一些组合。不起作用。错误是发布的,除了字符串匹配
部分少了一个“\”或者在正则表达式中使用命名组并对其进行测试。或者在正则表达式中使用命名组并对其进行测试。+1。基于他提到的原因,我将坚持ChrisF的测试方法。+1真棒。基于他提到的原因,我将坚持ChrisF的测试方法。