0

基本仕様で 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();
}
4

1 に答える 1

2

動作は現在、基底クラスではなく、コンテキスト クラスでのみサポートされています。動作の s を基本クラスに直接因数分解することは可能でしょうか? (基底クラスの s は、派生コンテキストの実行時に実行されます。)ItExecuteMethodOverridableBehaviorIt

申し訳ありませんが、上記の回答を書いているとき、私は気が狂っていたに違いありません。Itフィールドは基本クラスではサポートされEstablish、とのみサポートされBecauseます。は 1 つしか存在できBecauseませんが、階層内に複数のEstablish句が存在する場合があります。

Behaves_likeすべての派生クラスに動作 ( ) を設定することが唯一の方法だと思います。

于 2010-08-13T07:00:50.033 に答える