Почему в NUnit Assert.That (..) есть перегрузки ref? - PullRequest
8 голосов
/ 11 февраля 2011

Может быть, я просто тупой, но когда и почему вы должны использовать:

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)

вместо:

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)

Какое преимущество дает передача этим ссылкой этимметоды?

1 Ответ

5 голосов
/ 11 февраля 2011

Копаясь в исходном коде 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);
    }

против:

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

Как видите, в реализации нет никакой разницы.Перегрузка Ref T actual позволяет также передавать типы значений в качестве ссылок, в то время как ссылочные типы уже передаются в качестве ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...