2010-08-12 2 views
0

Je souhaite spécifier un Behaves_like sur une spécification de base pour garantir qu'une méthode particulière est marquée comme virtuelle. Quelque chose comme ceci:Utilisation de Behaves_like <TBehavior> sur une classe de base

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

Cependant le coureur d'essai ne relève pas ceci. Je pense que ce serait un PITA majeur de spécifier ehaves_like sur chaque spécification pour un gestionnaire de commandes. Est-ce possible? Si non, est-ce un comportement souhaité?

Mise à jour: Désolé pour la réponse tardive, voici la spécification d'échec:

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

Répondre

2

ne sont actuellement Behaviors pris en charge sur les classes de contexte, et non des classes de base. Serait-il faisable de factoriser le comportement du comportement ExecuteMethodOverridableBehavior directement dans la classe de base? ( It s dans les classes de base sera exécuté lorsque les contextes dérivés exécuter.)

Désolé, je devais avoir été hors de mon esprit en écrivant la réponse ci-dessus. It champs sont pas pris en charge sur les classes de base, seulement Establish et Because. Alors qu'il ne peut y avoir qu'un seul Because, il peut y avoir plusieurs clauses Establish dans la hiérarchie.

Je crains de mettre le comportement (Behaves_like) sur toutes les classes dérivées est la seule voie à suivre.

+0

Je préférerais le faire de cette façon. Cependant cela ne fonctionne pas. Il n'apparaît pas dans le programme de test de resharper et il ne s'exécute pas depuis la ligne de commande. –

+0

Juste pour m'assurer que je comprends bien: 'Les champs de' dans les classes de base ne fonctionnent pas pour vous? Pouvez-vous s'il vous plaît poster le code complet (y compris les spécifications du comportement) quelque part? –

+0

Mon message a été mis à jour, s'il vous plaît jeter un oeil. Merci. –

Questions connexes