也许我只是愚蠢但你何时以及为什么要使用:
NUnit.Framework.Assert.That<T>(ref T, NUnit.Framework.Constraints.IResolveConstraint, string, params object[])
NUnit.Framework.Assert.That<T>(ref T, NUnit.Framework.Constraints.IResolveConstraint, string)
NUnit.Framework.Assert.That<T>(ref T, NUnit.Framework.Constraints.IResolveConstraint)
Run Code Online (Sandbox Code Playgroud)
取代:
NUnit.Framework.Assert.That(object, NUnit.Framework.Constraints.IResolveConstraint, string, params object[])
NUnit.Framework.Assert.That(object, NUnit.Framework.Constraints.IResolveConstraint, string)
NUnit.Framework.Assert.That(object, NUnit.Framework.Constraints.IResolveConstraint)
Run Code Online (Sandbox Code Playgroud)
通过ref传递给这些方法有什么好处?
深入研究NUnit源代码,我发现了这个:
static public void That<T>(ref T actual, IResolveConstraint expression, string message, params object[] args)
{
Constraint constraint = expression.Resolve();
Assert.IncrementAssertCount();
if (!constraint.Matches(ref actual))
{
MessageWriter writer = new TextMessageWriter(message, args);
constraint.WriteMessageTo(writer);
throw new AssertionException(writer.ToString());
}
}
public virtual bool Matches<T>(ref T actual)
{
return Matches(actual);
}
Run Code Online (Sandbox Code Playgroud)
与:
static public void That(object actual, IResolveConstraint expression, string message, params object[] args)
{
Constraint constraint = expression.Resolve();
Assert.IncrementAssertCount();
if (!constraint.Matches(actual))
{
MessageWriter writer = new TextMessageWriter(message, args);
constraint.WriteMessageTo(writer);
throw new AssertionException(writer.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,实现没有区别.在Ref T actual过载允许你传递值类型为基准为好,而引用类型已经为引用传递.
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |