Я хотел бы указать Behave_like в базовой спецификации, чтобы убедиться, что конкретный метод отмечен как виртуальный. Что-то вроде этого:Использование Behaves_like <TBehavior> на базовом классе
public abstract class command_handler_context<TCommandHandler, TCommand>
: abstract_context<TCommandHandler>
where TCommandHandler : ICommandHandler<TCommand>
where TCommand : ICommand, new()
{
protected static TCommand Command;
private Establish context =() =>
{
Command = new TCommand();
};
private Because of =() => SubjectUnderTest.Execute(Command);
private Behaves_like<ExecuteMethodOverridableBehavior<TCommandHandler>> an_overridable_execute_method;
}
Однако испытательный бегун не поднимает это. Я думаю, что это было бы большой PITA, чтобы указать ehaves_like для каждой отдельной спецификации для обработчика команд. Это возможно? Если нет, это желаемое поведение?
Update: К сожалению о конце ответа, вот недостаток спецификация:
public abstract class context_base
{
protected static bool Result;
protected static bool RanOnBaseClass;
private Because of =() => { Result = true; };
private It should_be_true =() =>
{
RanOnBaseClass = true;
Result.ShouldBeTrue();
};
}
public class when_using_behaviors_on_a_base_class
: context_base
{
private It should_run_specs_on_the_base_class =() => RanOnBaseClass.ShouldBeTrue();
}
Я бы предпочел сделать это таким образом. Однако это не сработает. Он не отображается в тестовом бегуне resharper, и он не запускается из командной строки. –
Просто чтобы убедиться, что я прав: поля 'It' в базовых классах не работают для вас? Можете ли вы разместить где-нибудь полный код (включая характеристики поведения)? –
Мое сообщение обновлено, пожалуйста, взгляните. Благодарю. –