Pregunta

Tenemos un montón de DLL que nos dan acceso a nuestra base de datos y otras aplicaciones y servicios.

Hemos envuelto estas DLL con una fina capa de servicio WCF que luego consumen nuestros clientes.

No estoy seguro de cómo escribir pruebas unitarias que solo prueben la capa de servicio WCF.¿Debería simplemente escribir pruebas unitarias para las DLL y pruebas de integración para los servicios WCF?Agradecería cualquier sabiduría...Sé que si mis pruebas unitarias realmente van a la base de datos, en realidad no serán pruebas unitarias verdaderas.También entiendo que realmente no necesito probar el host del servicio WCF en una prueba unitaria.

Entonces, estoy confundido acerca de qué probar exactamente y cómo.

¿Fue útil?

Solución

Al consumidor de su servicio no le importa lo que hay debajo de su servicio.Para probar realmente su capa de servicio, creo que su capa necesita bajar a las DLL y la base de datos y escribir al menos CRUD prueba.

Otros consejos

Si desea realizar una prueba unitaria de sus clases de servicio WCF, asegúrese de diseñarlas teniendo en cuenta el acoplamiento flexible para poder simular cada dependencia, ya que solo desea probar la lógica dentro de la propia clase de servicio.

Por ejemplo, en el siguiente servicio, desgloso mi repositorio de acceso a datos usando "Inyección de dependencia del pobre".

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

En el cliente, puede simular el servicio WCF utilizando la interfaz del contrato de servicio.

<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 de lo que haga el servicio WCF ligero.Si es muy delgado y no hay ningún código interesante allí, no se moleste en realizar pruebas unitarias.No tenga miedo de no realizar una prueba unitaria de algo si no hay un código real allí.Si la prueba no puede ser al menos un nivel más simple que el código bajo prueba, no se moleste.Si el código es tonto, la prueba también lo será.No querrás tener más código tonto que mantener.

Si puede realizar pruebas que lleguen hasta la base de datos, ¡excelente!Es incluso mejor.¿No es una "verdadera prueba de unidad"? No hay problema en absoluto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top