문제

우리는 데이터베이스와 기타 애플리케이션 및 서비스에 대한 액세스를 제공하는 수많은 DLL을 보유하고 있습니다.

우리는 클라이언트가 사용하는 얇은 WCF 서비스 계층으로 이러한 DLL을 래핑했습니다.

WCF 서비스 계층만 테스트하는 단위 테스트를 작성하는 방법에 대해 잘 모르겠습니다.DLL에 대한 단위 테스트와 WCF 서비스에 대한 통합 테스트만 작성해야 합니까?어떤 지혜라도 감사하겠습니다...내 단위 테스트가 실제로 데이터베이스로 이동하면 실제로는 실제 단위 테스트가 아니라는 것을 알고 있습니다.또한 단위 테스트에서 WCF 서비스 호스트를 실제로 테스트할 필요가 없다는 것도 이해합니다.

그래서 정확히 무엇을 테스트해야 할지, 어떻게 테스트해야 할지 혼란스럽습니다.

도움이 되었습니까?

해결책

귀하의 서비스 소비자는 귀하의 서비스 아래에 무엇이 있는지 신경 쓰지 않습니다.서비스 계층을 실제로 테스트하려면 계층이 DLL과 데이터베이스로 이동하여 최소한 작성해야 한다고 생각합니다. 크루드 시험.

다른 팁

WCF 서비스 클래스를 단위 테스트하려면 서비스 클래스 자체 내부의 논리만 테스트하려고 하므로 각 종속성을 모의할 수 있도록 느슨한 결합을 염두에 두고 설계해야 합니다.

예를 들어, 아래 서비스에서는 "Poor Man's 종속성 주입"을 사용하여 데이터 액세스 저장소를 분리합니다.

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

클라이언트에서는 서비스 계약의 인터페이스를 사용하여 WCF 서비스 자체를 모의할 수 있습니다.

<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

이는 씬 WCF 서비스의 기능에 따라 다릅니다.정말 얇고 거기에 흥미로운 코드가 없다면 단위 테스트를 하지 마세요.실제 코드가 없다면 단위 테스트를 하지 않는 것을 두려워하지 마세요.테스트가 테스트 중인 코드보다 한 단계 이상 더 간단해질 수 없다면 신경쓰지 마세요.코드가 멍청하면 테스트도 멍청할 것이다.유지 관리하기 위해 더 이상 멍청한 코드를 갖고 싶지 않습니다.

DB까지 테스트할 수 있다면 훌륭합니다!훨씬 더 좋습니다."진정한 단위 테스트"가 아닙니다. 전혀 문제가되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top