我可以在模拟中处理不区分大小写的字符串吗?
C#6.0,NUnit 3.4.1(NuGet软件包),
NUnit3TestAdapter 3.4-1(NuGet软件包),
。Net Framework 4.6.1、
JustMock 2016.2.713.2、
Windows 10 x64,
可测试项目也使用.Net Framework 4.6.1
我们将假设我有一些类正在测试:
公共类AppManager{
公共字符串[]GetAppSets()=>Registry.LocalMachine
OpenSubKey(@“SOFTWARE\Autodesk\AutoCAD”,false)
?。GetSubKeyNames()
}
此外,我对GetAppSets方法进行了测试:
公共无效GetAppSets_Returns_ValidValue(){
<div>常量字符串子项=@“SOFTWARE\Autodesk\AutoCAD”
/*基于
的应用程序集
*AutoCAD 2009-2017.*/
string[]fakeSets=new[]{“R17.2”、“R18.0”},
“R18.1”、“R18.2”、“R19.0”、“R19-1”、“R20.0”和
“R20.1”、“R21.0”}
RegistryKey rk=Mock.Create
()
模拟。排列(()=>rk.GetSubKeyNames())。返回(
fakeSets)
模拟。排列(()=>Registry.LocalMachine.OpenSubKey
(子键,false))。返回(rk)
AppManager:appMng=new-AppManager()
字符串[]appSets=appMng.GetAppSets()
断言。AreEqual(伪造集、应用集)
}
此测试工作成功
但如果GetAppSets方法使用“
软件\Autodesk\AutoCAD
”或“
Software\Autodesk\AutoCAD
”,而不是“
”字符串,则此测试将失败:如果更改字符串大小写,appSets变量将为空(
,因为我的计算机上不存在该注册表项。
)
因此,在这种情况下,
测试人员需要知道GetAppSets方法实现(
坏的变体,
)或
来处理不区分大小写的字符串等参数
是否可以使用第二种变体
**** Hidden Message ***** 今天我从Telerik团队得到了答案:是的,您可以使用Arg.Matches机制灵活使用我们的匹配器。有关更多信息,您可以查看这篇博文-在JustMock Arrangements中处理参数,更具体地说-最后一段-使用Lambdas进行参数匹配。在您的情况下,我想这将完成这项工作Mock.Arrange (() => Registry.LocalMachine.OpenSubKey(Arg.Matches(s=>s.ToLower () == subkey.ToLower()),false))。返回(rk);。
致意,SvetlozarTelerik by Process。
页:
[1]