Использование Behaves_like <TBehavior>в базовом классе - PullRequest
0 голосов
/ 13 августа 2010

Я хотел бы указать Behaves_like в базовой спецификации, чтобы гарантировать, что определенный метод помечен как виртуальный.Примерно так:

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 в каждой спецификации для обработчика команд.Это возможно?Если нет, это желаемое поведение?

Обновление: Извините за поздний ответ, вот ошибочная спецификация:

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

1 Ответ

2 голосов
/ 13 августа 2010

Поведение в настоящее время поддерживается только для контекстных классов, но не для базовых классов. Было бы целесообразно включить It из поведения ExecuteMethodOverridableBehavior прямо в базовый класс?(It s в базовых классах будут выполняться при выполнении производных контекстов.)

Извините, я, должно быть, сошел с ума, когда писал ответ выше.It поля не поддерживаются в базовых классах, только Establish и Because.Хотя может быть только один Because, в иерархии может быть несколько предложений Establish.

Боюсь, что использование поведения (Behaves_like) для всех производных классов - единственный путь.1018 *

...