我想在基本规范上指定类似于active_的行为,以确保特定方法标记为虚拟。这样的事情:

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();
}
有帮助吗?

解决方案

目前仅在上下文类中支持行为,而不是基本类别。 考虑到 Its ExecuteMethodOverridableBehavior 行为直接进入基础? ((It派生上下文执行时,基本类中的s将执行。)

抱歉,在写上面的答案时,我一定已经不知所措。 It 字段是 不是 仅支持基础课程 EstablishBecause. 。虽然只有一个 Because, ,可能有多个 Establish 层次结构中的子句。

我担心行为(Behaves_like)在所有派生类中都是唯一的选择。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top