«Не было найдено подходящего конструктора», даже когда я использую базовый класс в качестве основы для параметризованногC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 «Не было найдено подходящего конструктора», даже когда я использую базовый класс в качестве основы для параметризованног

Сообщение Anonymous »

Я хочу иметь параметризованные тесты в NUNIT для тестов, работающих в двух разных сценариях. Большинство/некоторые тесты одинаковы, но некоторые нет. Поэтому я подумал, я хочу провести базовый класс для проведения общих тестов в двух сценариях. -cs prettyprint-override ">

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

using FluentAssertions;
using NUnit.Framework;

public class SystemUnderTest
{
public bool? CrucialSettingsForSut { get; }

public SystemUnderTest(bool crucialSettingsForSut)
{
// does something with crucialSettingsForSut that inheritly changes the logic, this is just an example
this.CrucialSettingsForSut = crucialSettingsForSut;
}
}

public class ConstructorTest
{
public class BaseTestClass
{
protected readonly SystemUnderTest sut;

public BaseTestClass(bool crucialSettingsForSut)
{
this.sut = new SystemUnderTest(crucialSettingsForSut);
}

[Test]
public void TestApplicableToBothCases()
{
this.sut.CrucialSettingsForSut.Should().NotBeNull();
}
}

[TestFixture]
public class ActualTestFixtureFalse : BaseTestClass
{
public ActualTestFixtureFalse() : base(false) { }

[Test]
public void TestOnlyApplyingToFalse()
{
this.sut.CrucialSettingsForSut.Should().BeFalse();
}
}

[TestFixture]
public class ActualTestFixtureTrue : BaseTestClass
{
public ActualTestFixtureTrue() : base(true) { }

[Test]
public void TestOnlyApplyingToTrue()
{
this.sut.CrucialSettingsForSut.Should().BeTrue();
}
}
}
Это упрощенный пример, конечно, реальный код более сложный.
Важно то, что TestonlyApplyingTotrue и testonlyApplyingTofalse < /code> - противоречивые , то есть я не могу поместить их в один и тот же класс и пройти оба теста в тестовой области с параметрами для конструктора.
< H2> Проблема
К сожалению, NUNIT пытается создать экземпляр BASETESTCLASS , хотя я на самом деле не хочу этого. В конце концов, это просто содержит набор «базовых тестов»:
Это приводит к этой ошибке для testapplicabletobothcases :

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

OneTimeSetUp: No suitable constructor was found
Exception doesn't have a stacktrace

-----

No suitable constructor was found
Exception doesn't have a stacktrace
попытки
Я не видел, чтобы в тестах NUNIT не было обнаружено, но в моем случае BasetestClass и имеет цель, как объяснено. Я не могу решить это с помощью TestFixture .
В качестве альтернативы может быть пользовательская assert.ignore в testonlyapplyingtotru запускается, если запускается соответствующий другой тестовый пример, но это Imho Ugly Code Design и вызывает запись «игнорируемого теста».
с наследием, которое я использовал здесь, имеет гораздо больше смысла.
Также, очевидно Вряд ли масштабируется, так как у меня не есть только один тест для каждого сценария, как в этом упрощенном примере. ИМХО это хорошо.
На самом деле, он представлен как Abstract Test Infrastructure Pattern < /em> в Art of Unit Testing
Second Edition < /em> (с примерами в c#) от roy osherove . (ISBN: 9781617290893) < /p>
Для того, что это важно: по крайней мере в той версии, которую я имею, у них на самом деле такая же ошибка! BASETESTSCLASS (в списке 7.4, стр. 139) не абстрактно . (Я написал это после того, как знал решение.)
Вопрос
Итак, как я могу решить это самым элегантным способом?

Подробнее здесь: https://stackoverflow.com/questions/794 ... sis-for-pa
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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