Domanda

Abbiamo un sacco di DLL che ci danno accesso al nostro database e ad altre applicazioni e servizi.

Abbiamo avvolto queste DLL con un sottile livello di servizio WCF che i nostri clienti poi utilizzano.

Sono un po' incerto su come scrivere unit test che testino solo il livello di servizio WCF.Dovrei semplicemente scrivere unit test per le DLL e test di integrazione per i servizi WCF?Apprezzerei qualsiasi saggezza...So che se i miei test unitari vanno effettivamente al database non saranno effettivamente veri test unitari.Capisco anche che non ho davvero bisogno di testare l'host del servizio WCF in un test unitario.

Quindi, sono confuso su cosa testare esattamente e come.

È stato utile?

Soluzione

Al consumatore del tuo servizio non interessa cosa c'è sotto il tuo servizio.Per testare davvero il tuo livello di servizio, penso che il tuo livello debba scendere nelle DLL e nel database e scrivere almeno CRUDO test.

Altri suggerimenti

Se desideri testare l'unità delle tue classi di servizio WCF, assicurati di progettarle tenendo presente l'accoppiamento libero in modo da poter deridere ogni dipendenza poiché desideri solo testare la logica all'interno della classe di servizio stessa.

Ad esempio, nel servizio seguente esploro il mio repository di accesso ai dati utilizzando "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

Sul client è possibile simulare il servizio WCF stesso utilizzando l'interfaccia del contratto di servizio.

<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

Dipende da cosa fa il servizio WCF sottile.Se è davvero scarno e non c'è codice interessante, non preoccuparti di testarlo.Non aver paura di non testare qualcosa se non c'è un codice reale lì.Se il test non può essere almeno un livello più semplice del codice sotto il test, non preoccuparti.Se il codice è stupido, anche il test sarà stupido.Non vuoi avere più codice stupido da mantenere.

Se riesci ad avere test che arrivano fino al db, allora fantastico!È ancora meglio.Non è un "vero test unitario?" Non è affatto un problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top