Проблема с расширением Is NUnitC#

Место общения программистов C#
Ответить
Anonymous
 Проблема с расширением Is NUnit

Сообщение Anonymous »

Сейчас я пытаюсь расширить класс Is NUnit, но наткнулся на стену. У меня оно уже в основном функционально, но, как ни странно, только если мое расширение не находится внутри пространства имен. Более того, даже если это работает, я не могу использовать такие вещи, как Is.Not. Я следовал инструкциям официальной документации и учебника (и искал в Google), но безрезультатно. Ребята, есть ли у вас какие-либо подсказки, как найти и исправить мою проблему с пространством имен и Is.Not?
Любые дополнительные вопросы приветствуются.
Класс расширения, включая пространство имен:

Код: Выделить всё

namespace DFA_Lib_Unit_Tests.Constraints
{
public class Is : NUnit.Framework.Is
{
public static VectorConstraint OnSameTile(object expected)
{
return new VectorConstraint(expected);
}
}
}
Класс, который должен позволить мне использовать Is.Not.

Код: Выделить всё

namespace DFA_Lib_Unit_Tests.Constraints
{
public static class CustomConstraintExtensions
{
public static VectorConstraint OnTile(this ConstraintExpression expression, object expected)
{
VectorConstraint constraint = new VectorConstraint(expected);
expression.Append(constraint);
return constraint;
}
}
}
Макет теста

Код: Выделить всё

using System.Numerics;

namespace DFA_Lib_Unit_Tests.Tests
{
public class TestClass
{
[Test]
public void TestMethod()
{
Vector2 firstVector = new Vector2(1, 1);
Vector2 secondVector = new Vector2(1, 1);

// When extension method is in namespace: 'Is' is an ambiguous reference between 'DFA_Lib_Unit_Tests.Counstraints.Is' and 'NUnit.Framework.Is'
// Otherwise, executes as expected. I do want to put it in a namespace however.
Assert.That(firstVector, Is.OnSameTile(secondVector));

// When extension method is not in a namespace, I still cannot use Is.Not and receive the following compile error:
// 'ConstraintExpression' does not contain a definition for 'OnSameTile' and no accessible extension method 'OnSameTile' accepting a first argument of type 'ConstraintExpression' could be found (are you missing a using directive or an assembly reference?).
Assert.That(firstVector, Is.Not.OnSameTile(secondVector));
}
}
}
Мои ограничения. Не думаю, что это актуально, но просто для справки.

Код: Выделить всё

namespace DFA_Lib_Unit_Tests.Constraints
{
public class VectorConstraint : Constraint
{
public object Expected { get; }

public VectorConstraint(object expected)
{
Expected = expected;
}

public override ConstraintResult ApplyTo(TActual actual)
{
// Comparison code here
}
}
}
Изменить: Достигнут некоторый прогресс. Is.Not просто не работает, потому что метод в CustomConstraintExtensions назывался «OnTile», а не «OnSameTile».
Я также обнаружил, что класс расширения Is, а не если ему не требуется пространство имен, он должен находиться в том же пространстве имен, что и родительское пространство имен тестового класса, или в нем. Что мне кажется странным, поскольку такое ограничение не распространяется на другие классы расширений в моем проекте.

Подробнее здесь: https://stackoverflow.com/questions/788 ... -nunits-is
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»