JBo*_*ond 9 c# mocking nsubstitute
我们目前正在从RhinoMocks迁移到NSubstitute.
我有一个采用类型对象的方法DatabaseParams.该类具有以下结构(简化):
public class DatabaseParams
{
public string StoredProcName { get; private set; }
public SqlParameter[] Parameters { get; private set; }
public DatabaseParams(string storeProcName, SqlParameter[] spParams)
{
StoredProcName = storeProcName;
Parameters = spParams;
}
}
Run Code Online (Sandbox Code Playgroud)
我有以下方法我想检查传递给它的参数是否正确:
public interface IHelper
{
Task<object> ExecuteScalarProcedureAsync(DatabaseParams data);
}
Run Code Online (Sandbox Code Playgroud)
如何DatabaseParams使用正确的值测试传递给该方法的实例?
我可以在RhinoMocks中用这样的方法做到这一点:
helperMock.Expect(m => m.ExecuteScalarProcedureAsync(Arg<DatabaseHelperParameters>.Matches(
p => p.StoredProcName == "up_Do_Something"
&& p.Parameters[0].ParameterName == "Param1"
&& p.Parameters[0].Value.ToString() == "Param1Value"
&& p.Parameters[1].ParameterName == "Param2"
&& p.Parameters[1].Value.ToString() == "Param2Value"
))).Return(Task.FromResult<DataSet>(null));
Run Code Online (Sandbox Code Playgroud)
正在模拟包含该方法helperMock的接口.IHelperExecuteScalarProcedureAsync
JBo*_*ond 14
我自己已经找到了答案.
NSubstitute只需要使用.Received()调用,然后指定方法的参数.您可以将参数匹配指定为谓词.
例如:
helperMock.Received().ExecuteScalarProcedureAsync(Arg.Is<DatabaseParams>(
p => p.StoredProcName == "up_Do_Something"
&& p.Parameters[0].ParameterName == "Param1"
&& p.Parameters[0].Value.ToString() == "Param1Value"
&& p.Parameters[1].ParameterName == "Param2"
&& p.Parameters[1].Value.ToString() == "Param2Value"));
Run Code Online (Sandbox Code Playgroud)
Cas*_*nge 13
另一种方法是使用Do(参见https://nsubstitute.github.io/help/actions-with-arguments/)。我更喜欢这个,因为它允许您针对参数的特定属性调用断言,这可以为您提供关于参数对象的哪些特定属性不正确的更好的反馈。例如:
StoredProc sp = null; // Guessing the type here
helperMock.Received().ExecuteScalarProcedureAsync(Arg.Do<DatabaseParams>(p => sp = p));
// NUnit assertions, but replace with whatever you want.
Assert.AreEqual("up_Do_Something", sp.StoredProcName);
Assert.AreEqual("Param1", p.Parameters[0].ParameterName);
Assert.AreEqual("Param1Value", p.Parameters[0].Value.ToString());
Assert.AreEqual("Param2", p.Parameters[1].ParameterName);
Assert.AreEqual("Param2Value", p.Parameters[1].Value.ToString());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4770 次 |
| 最近记录: |