Pergunta

Eu sou muito novo para zombar então isso pode ser algo que eu não estou pegando ainda, mas eu não posso encontrar um bom exemplo em qualquer lugar.

Eu estou tentando afirmar que, por padrão, qualquer classe que herda de minha classe abstrata irá instanciar uma coleção no construtor. Aqui é a classe abstrata:

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

Como faço para zombar isso com Rhino? Se eu fizer um GenerateMock<DataCollectionWorkflow> (ou um esboço), o construtor é executado e campo privado "_params" da simulação é inicializado, mas propriedade "Parameters" da simulação é simplesmente nulo.

Obviamente, a subclasse de simulação gerada é substituindo a implementação propriedade. Existe alguma maneira de excluir a propriedade Parâmetros de ser re-implementado?

Graças.

Foi útil?

Solução

Ok, eu percebi isso. Chalk-me como outra vítima para os meandros da Rhino. Esse tipo de coisa me faz querer mudar para um quadro mais simples, talvez eu vou verificar MOQ.

Portanto, a resposta é usando PartialMocks. Eu tive brevemente brincou com a geração de um mock parcial, mas quando eu corri o depurador sobre ele, notei que as propriedades não foram ainda null, eles estavam jogando exceções estranhas, então eu não olhar muito mais profundo. Eu estava usando o tipo de forma curta AAA da sintaxe.

Acontece que se eu simplesmente colocar o mock em modo de reprodução, as obras de teste -. As propriedades são usados ??como é (como deveriam ser com um mock parcial)

Então, aqui está a resposta:

[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");
      }
}

Eu percebo que este é um teste stateful mas na verdade é um prelúdio mais simples de alguns testes de comportamento que envolve a propriedade em questão, então eu queria neste caso, como pré-requisito. Espero que ajude alguém.

Outras dicas

Tente fazer _params virtual

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top