Pergunta

Temos um monte de DLLs que nos dão acesso ao nosso banco de dados e outros aplicativos e serviços.

Envolvemos essas DLLs com uma fina camada de serviço WCF que nossos clientes consomem.

Não tenho certeza de como escrever testes de unidade que testem apenas a camada de serviço WCF.Devo apenas escrever testes unitários para as DLLs e testes de integração para os serviços WCF?Eu apreciaria qualquer sabedoria ...Eu sei que se meus testes de unidade realmente forem para o banco de dados, eles não serão testes de unidade verdadeiros.Também entendo que realmente não preciso testar o host do serviço WCF em um teste de unidade.

Então, estou confuso sobre exatamente o que testar e como.

Foi útil?

Solução

O consumidor do seu serviço não se importa com o que está por baixo do seu serviço.Para realmente testar sua camada de serviço, acho que sua camada precisa ir até as DLLs e ao banco de dados e escrever pelo menos CRUD teste.

Outras dicas

Se você deseja testar a unidade de suas classes de serviço WCF, certifique-se de projetá-las com o acoplamento fraco em mente, para poder simular cada dependência, pois deseja apenas testar a lógica dentro da própria classe de serviço.

Por exemplo, no serviço abaixo eu divido meu repositório de acesso a dados usando "Poor Man's Dependency Injection".

Public Class ProductService
    Implements IProductService

    Private mRepository As IProductRepository

    Public Sub New()
        mRepository = New ProductRepository()
    End Sub

    Public Sub New(ByVal repository As IProductRepository)
        mRepository = repository
    End Sub

    Public Function GetProducts() As System.Collections.Generic.List(Of Product) Implements IProductService.GetProducts
        Return mRepository.GetProducts()
    End Function
End Class

No cliente você pode simular o próprio serviço WCF usando a interface do contrato de serviço.

<TestMethod()> _
Public Sub ShouldPopulateProductsListOnViewLoadWhenPostBackIsFalse()
    mMockery = New MockRepository()
    mView = DirectCast(mMockery.Stub(Of IProductView)(), IProductView)
    mProductService = DirectCast(mMockery.DynamicMock(Of IProductService)(), IProductService)
    mPresenter = New ProductPresenter(mView, mProductService)
    Dim ProductList As New List(Of Product)()
    ProductList.Add(New Product)
    Using mMockery.Record()
        SetupResult.For(mView.PageIsPostBack).Return(False).Repeat.Once()
        Expect.Call(mProductService.GetProducts()).Return(ProductList).Repeat.Once()
    End Using
    Using mMockery.Playback()
        mPresenter.OnViewLoad()
    End Using
    'Verify that we hit the service dependency during the method when postback is false
    Assert.AreEqual(1, mView.Products.Count)
    mMockery.VerifyAll()
End Sub

Depende do que o serviço Thin WCF faz.Se for muito fino e não houver nenhum código interessante lá, não se preocupe em testá-lo na unidade.Não tenha medo de não testar algo se não houver código real lá.Se o teste não puder ser pelo menos um nível mais simples que o código em teste, não se preocupe.Se o código for burro, o teste também será burro.Você não quer ter mais códigos idiotas para manter.

Se você puder fazer testes que vão até o banco de dados, ótimo!É ainda melhor.Não é um "teste de unidade verdadeiro?" Não um problema de todos.

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