2010-08-12 1 views
0

Я хотел бы указать 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(); 
} 

ответ

2

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

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

Я боюсь положить поведение (Behaves_like) на все производные классы, это единственный способ пойти.

+0

Я бы предпочел сделать это таким образом. Однако это не сработает. Он не отображается в тестовом бегуне resharper, и он не запускается из командной строки. –

+0

Просто чтобы убедиться, что я прав: поля 'It' в базовых классах не работают для вас? Можете ли вы разместить где-нибудь полный код (включая характеристики поведения)? –

+0

Мое сообщение обновлено, пожалуйста, взгляните. Благодарю. –

 Смежные вопросы

  • Нет связанных вопросов^_^