wcf unit-testing

¿Cómo pruebo la unidad de un servicio WCF?



unit-testing (3)

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

Hemos envuelto estos archivos DLL con una delgada capa de servicio WCF que nuestros clientes luego consumen.

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

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


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


Depende de lo que haga el servicio WCF delgado. Si es muy delgado y no hay ningún código interesante allí, no te molestes en probarlo unitariamente. No tengas miedo de no probar 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 la prueba, no se moleste. Si el código es tonto, la prueba también será tonta. No desea tener más código tonto para mantener.

Si puede tener pruebas que lleguen hasta el DB ¡entonces genial! Es aún mejor No es una "verdadera prueba de unidad"? No es un problema en absoluto.


Si desea probar las clases de servicio WCF, asegúrese de diseñarlas teniendo en cuenta el acoplamiento libre para que pueda simular cada dependencia, ya que solo quiere probar la lógica dentro de la clase de servicio.

Por ejemplo, en el siguiente servicio divido mi repositorio de acceso a datos 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

En el cliente puede burlarse del servicio WCF usando 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