在基类</tbehavior>上使用Behaves_like <tbehavior>

时间:2010-08-12 20:31:14

标签: c# bdd mspec

我想在基本规范上指定一个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;
}

然而,测试跑步者不会选择这个。我认为在命令处理程序的每个规范上指定ehaves_like是一个主要的PITA。这可能吗?如果没有,这是一个理想的行为吗?

更新:对于迟到的回复感到抱歉,这是失败的规范:

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 个答案:

答案 0 :(得分:2)

目前仅在上下文类而非基类上支持行为。 是否可以将It行为的ExecuteMethodOverridableBehavior分解为基类? (当导出的上下文执行时,将在基类中执行It。)

抱歉,在写上面的答案时,我一定不在意。基类上的It字段,仅EstablishBecause。虽然只能有一个Because,但层次结构中可能有多个Establish子句。

我担心将行为(Behaves_like)放在所有派生类上是唯一的方法。