2011-02-11 12 views
8

Tal vez estoy siendo tonta, pero cuándo y por qué usaría:¿Por qué el Assert.That de NUnit (..) tiene sobrecargas de ref?

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) 

en lugar de:

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) 

¿Qué ventaja que pasa por ref traer a este estos métodos?

Respuesta

5

de excavación en el código fuente NUnit, encontré esto:

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); 
    } 

frente:

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()); 
     } 
    } 

Como se puede ver, no hay ninguna diferencia en la aplicación. La sobrecarga Ref T actual le permite pasar tipos de valores como referencia, mientras que los tipos de referencia ya se pasan como referencia.

Cuestiones relacionadas