Pergunta

Como são as pessoas o teste de unidade de código que usa o Linq to SQL?

Foi útil?

Solução

Atualização:

Fredrik tem de colocar uma solução de exemplo sobre como fazer o teste de unidade linq2sql aplicações mais em seu blog.Você pode baixá-lo em:

http://web.archive.org/web/20120415022448/http://iridescence.no/post/DataContext-Repository-Pattern-Example-Code.aspx

Não só eu acho ótimo que ele postou uma solução de exemplo, ele também conseguiu extrair interfaces para todas as classes, o que torna o design mais dissociado.

Meu post antigo:

*Eu achei esses blogs que eu acho que são um bom começo para fazer o DataContext wrapper:Link1 Link2

Eles cobrem quase o mesmo assunto, exceto que o primeiro implementa significa para a extração de interfaces para as tabelas bem.O segundo é mais abrangente, embora, por isso eu incluí-lo bem.*

Outras dicas

3 anos de atraso, mas isso é como eu faço:

https://github.com/lukesampson/LinqToSQL-test-extensions/

Não há necessidade de escrever um wrapper ou fazer um monte de encanamento, basta soltar o modelo T4 junto ao seu .dbml e você terá:

  1. Uma interface para o seu contexto de dados e.g.IExampleDataContext
  2. Em memória de simulação para o seu contexto de dados e.g.MemoryExampleDataContext

Tanto utilizará automaticamente os mapeamentos já configurado em seu DBML.

Assim, você pode fazer coisas como

public class ProductRepo {
    IExampleDataContext DB { get; set };
    public ProductRepo(IExampleDataContext db) {
        DB = db;
    }

    public List<Product> GetProducts() {
        return DB.Products.ToList();
    }
}

e você pode chamar que, com o

new ProductRepo(new MemoryExampleDataContext()).GetProducts(); // for testing

ou

new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB

Enrole o DataContext, zombar do wrapper.Sua a maneira mais rápida de fazê-lo, tho requer codificação para o teste, o que algumas pessoas pensam, os cheiros.Mas, às vezes, quando você tem dependências que não pode ser (facilmente) escarnecido, é a única maneira.

Linq torna o teste muito mais fácil.Consultas Linq funcionam tão bem em Listas como o Linq para sql coisas.Você pode trocar o Linq to SQL para a lista de objetos de teste e de que maneira.

Mattwar sobre a O Rebelde De Log Da Web tinha um ótimo artigo sobre como mock-up de uma extensible Linq2Sql contexto de dados.Confira -- ZOMBA DE NIX - EXTENSÍVEL, LINQ TO SQL DATACONTEXT

Normalmente, você não precisa testar a parte do código que usa o LINQ to SQL, mas se você realmente quiser, você pode usar os mesmos conjuntos de dados que você está consultando contra o servidor e transformá-los em objetos na memória e executar as consultas LINQ (que usaria a Enumerável métodos em vez de Consultáveis).

Outra opção é usar o Matt Warren mockable versão do DataContext.

Você também pode obter as instruções de SQL que o LINQ to SQL usa fazendo-o através do depurador (a partir do IQueryable objeto), verifique as manualmente e, em seguida, incluí-los em testes automatizados.

O LINQ to SQL é realmente muito bom para o teste de unidade, como ele tem a capacidade de criar bancos de dados sobre a voar a partir do que é definido no seu DBML.

Torna-se muito bom para testar um ORM camada de criar o DB através do DataContext e tê-lo vazio para começar.

Eu cobri-lo no meu blog aqui: http://web.archive.org/web/20090526231317/http://www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql.aspx

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