Frage

Wir verfügen über eine ganze Reihe von DLLs, die uns Zugriff auf unsere Datenbank und andere Anwendungen und Dienste ermöglichen.

Wir haben diese DLLs mit einer dünnen WCF-Dienstschicht umhüllt, die unsere Kunden dann nutzen.

Ich bin etwas unsicher, wie man Komponententests schreibt, die nur die WCF-Dienstschicht testen.Sollte ich nur Unit-Tests für die DLLs und Integrationstests für die WCF-Dienste schreiben?Ich würde mich über jede Weisheit freuen ...Ich weiß, dass meine Unit-Tests, wenn sie tatsächlich in die Datenbank gehen, keine echten Unit-Tests sind.Mir ist auch klar, dass ich den WCF-Diensthost nicht wirklich in einem Komponententest testen muss.

Daher weiß ich nicht genau, was ich testen soll und wie.

War es hilfreich?

Lösung

Dem Verbraucher Ihres Dienstes ist es egal, was sich hinter Ihrem Dienst verbirgt.Um Ihre Serviceschicht wirklich zu testen, muss Ihre Schicht meiner Meinung nach bis zu den DLLs und der Datenbank reichen und zumindest schreiben CRUD prüfen.

Andere Tipps

Wenn Sie Ihre WCF-Dienstklassen einem Unit-Test unterziehen möchten, stellen Sie sicher, dass Sie sie unter Berücksichtigung der losen Kopplung entwerfen, damit Sie jede Abhängigkeit simulieren können, da Sie nur die Logik innerhalb der Dienstklasse selbst testen möchten.

Im folgenden Dienst teile ich beispielsweise mein Datenzugriffs-Repository mithilfe von „Poor Man's Dependency Injection“ auf.

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

Auf dem Client können Sie den WCF-Dienst selbst über die Schnittstelle des Dienstvertrags verspotten.

<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

Es hängt davon ab, was der Thin WCF-Dienst tut.Wenn es wirklich dünn ist und es dort keinen interessanten Code gibt, machen Sie sich nicht die Mühe, es einem Unit-Test zu unterziehen.Haben Sie keine Angst davor, etwas nicht einem Unit-Test zu unterziehen, wenn dort kein echter Code vorhanden ist.Wenn der Test nicht mindestens eine Ebene einfacher sein kann als der zu testende Code, machen Sie sich keine Mühe.Wenn der Code dumm ist, ist auch der Test dumm.Sie möchten nicht noch mehr dummen Code pflegen müssen.

Wenn Sie Tests durchführen können, die bis zur Datenbank reichen, dann ist das großartig!Es ist sogar noch besser.Es ist kein "wahrer Einheitstest?" Absolut kein Problem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top