Question

Je suis assez nouveau pour me moquer, alors c'est peut-être quelque chose que je ne comprends pas encore, mais je ne peux pas trouver un bon exemple nulle part.

J'essaie d'affirmer que, par défaut, toute classe qui hérite de ma classe abstraite instancie une collection dans le constructeur. Voici la classe abstraite:

public abstract class DataCollectionWorkflow : SequentialWorkflowActivity
{
        private readonly DataSet _output = new DataSet();
        private List<DataCollectionParameter> _params = null;

        public DataCollectionWorkflow()
        {
            _params = new List<DataCollectionParameter>();   
        }

        public virtual IList<DataCollectionParameter> Parameters
        {
            get { return _params; }
            set { _params = (List<DataCollectionParameter>)value; }
        }
}

Comment puis-je me moquer de cela avec Rhino? Si je fais un GenerateMock<DataCollectionWorkflow> (ou un stub), le constructeur s'exécute et le champ privé de la maquette & "; _params &"; est initialisé, mais la maquette " Parameters " la propriété est simplement nulle.

De toute évidence, la sous-classe factice générée remplace l’implémentation de la propriété. Existe-t-il un moyen d’exclure la réimplémentation de la propriété Parameters?

Merci.

Était-ce utile?

La solution

D'accord, je l'ai compris. Inscris-moi comme une autre victime de la complexité de Rhino. Ce genre de chose me donne envie de passer à un cadre plus simple, peut-être que je vérifierai MoQ.

Donc, la réponse est d'utiliser PartialMocks. J'avais brièvement joué avec la création d'une simulation partielle, mais lorsque j'ai passé le débogueur dessus, j'ai remarqué que les propriétés n'étaient même pas nulles, elles lançaient des exceptions étranges, alors je n'avais pas l'air beaucoup plus profond. J'utilisais le type abrégé de syntaxe AAA.

Si je mets simplement la maquette en mode de lecture, le test fonctionne: les propriétés sont utilisées telles quelles (comme elles devraient l'être avec une maquette partielle).

Alors, voici la réponse:

[Test]
public void ShouldCreateParameterListInConstructor()
{
      var mockRepository = new MockRepository();
      var mock = mockRepository.PartialMock<DataCollectionWorkflow>();
      using ( mockRepository.Record() )
      {

      }
      using (mockRepository.Playback())
      {
           Assert.That(mock.Parameters, Is.Not.Null, "DataCollectionWorkflow base class didn't create new param collection");
      }
}

Je réalise qu’il s’agit d’un test avec état, mais c’est en fait un prélude plus simple à certains tests comportementaux impliquant la propriété en question. J’ai donc souhaité que cette affaire soit conditionnelle. J'espère que ça aidera quelqu'un.

Autres conseils

Essayez de rendre _params virtuels

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top