Como separar uma camada intermediária e um conjunto de dados para permitir testes de unidade?

StackOverflow https://stackoverflow.com/questions/153291

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho uma pergunta em SO perguntando como ligar uma camada intermediária para um DataSet.

Eu coloquei uma resposta mostrando o que eu tinha vindo acima com, mas eu não estou feliz com o acoplamento apertado. Eu apenas comecei a entrar em testar e achar que é uma boa meta para o meu código.

Como é que este código ser desacoplada para permitir testes de unidade?

Obrigado,
Keith

Foi útil?

Solução

IMO; DataSets são maus. Eles são, e só deve ser usado como, bancos de dados offline. Nada mais, IMO. No entanto, o que você faz no seu Data Access Layer (DAL) não deve realmente ter impacto na sua camada de negócio (BL). Eu tinha acabado de usar objetos (usar interfaces) entre eles (IList) e então usar uma interface para definir o seu DAL (IRepository) eo nyou pode zombar essa interface para retorno de tudo o que você precisa em sua BL para testes de unidade. Unidade testando conjuntos de dados é outra besta, nunca tentou isso e eu espero que nunca tem que ... Talvez um in-memory banco de dados é a sua melhor aposta lá ...

Oh, e por zombar Eu usei RhinoMock com algum sucesso. Eu também incentivá-lo a olhar para IOCs ( http://www.castleproject.org/ ).

Outras dicas

Você precisa COI (inversão de controle) e objetos mock.

Convido você para assistir dnrTV episódio 126 com James Kovacs.

Ele demonstra exatamente o que você está procurando.

Você já tentou Spring.net ? Isso fará com que o seu código mais limpo e menos acopladas. Ele também fornece classes úteis para fazer seus testes de integração.

Depende do que você quer de teste:

  • Você quer testar a recuperação de dados a partir do banco de dados?
  • Construindo os objetos a partir dos conjuntos de dados?
  • inserções ou atualizações para o banco de dados?
  • E assim por diante ...

Aqui vai uma sugestão:

Uma ordem contém todos os seus filhos. Este é um agregado, um todo. Você começa uma ordem com detalhes de um repositório:

var order = repository.GetOrderBy(id);

O repositório obtém os dados do banco de dados:

var dataset = orderDatabase.GetOrderAndDetailsBy(id);

O repositório pode usar um construtor para criar a ordem:

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);

Você teria que criar um repositório da seguinte forma:

var repository = new OrderRepository(orderDatabase, orderBuilder);

Agora você pode criar um repositório com falsos colaboradores, dependendo do que você deseja testar.

Se você tem objetos de entidade, você pode usar simulações para a unidade testar sua camada intermediária.

RWendi

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