我有以下测试,旨在确保生成的文件路径具有特定格式。使用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的方法。但问题仍然存在。
答案 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)
你有一个额外的方括号!删除它,它应该没问题。