Код: Выделить всё
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 и вызывает запись «игнорируемого теста».
с наследием, которое я использовал здесь, имеет гораздо больше смысла.
Также, очевидно Вряд ли масштабируется, так как у меня не есть только один тест для каждого сценария, как в этом упрощенном примере. IMHO это хорошо для простых случаев.
На самом деле, он представлен как аспектная тестовая инфраструктурная шаблон < /em> в искусство единичного тестирования
Second Edition < /em> ( с примерами в C#) от roy Osherove . (ISBN: 9781617290893) < /p>
Для того, что это важно: по крайней мере в той версии, которую я имею, у них на самом деле такая же ошибка! BASETESTSCLASS (в списке 7.4, стр. 139) не абстрактно . (Я написал это после того, как знал решение.)
Просто это не имеет значения, потому что там не включен фактический тест в (неабстрактный) базовый класс. < /P>
Листинг 7.6 и т. д. Затем использует настоящий абстрактный базовый класс в качестве решения для этого, и, насколько я прочитал, также включает тест в базовом классе, тогда.
Вопрос
Итак, как я могу решить это самым элегантным способом?
Подробнее здесь: https://stackoverflow.com/questions/794 ... sis-for-pa