首页 / 知识

如何对WCF服务进行单元测试?

2023-04-13 19:11:00

如何对WCF服务进行单元测试?

How do I unit test a WCF service?

我们有一堆DLL,可让我们访问数据库以及其他应用程序和服务。

我们用瘦的WCF服务层包装了这些DLL,然后我们的客户就使用了该服务层。

我对如何编写仅测试WCF服务层的单元测试不 我是否应该只为DLL编写单元测试,为WCF服务编写集成测试? 我将不胜感激……我知道,如果我的单元测试实际上进入了数据库,那么它们实际上并不是真正的单元测试。 我也了解到,我真的不需要在单元测试中测试WCF服务主机。

因此,我对要测试什么以及如何进行测试感到困惑。


这取决于瘦WCF服务的功能。如果它真的很薄并且那里没有有趣的代码,请不要对它进行单元测试。如果那里没有真正的代码,不要害怕不对单元进行测试。如果测试不能比编写的代码简单至少一级,请不要打扰。如果代码是愚蠢的,则测试也将是愚蠢的。您不想维护更多的哑代码。

如果您可以进行一直到数据库的测试,那就太好了!更好。这不是"真正的单元测试"吗?完全没有问题。


如果要对WCF服务类进行单元测试,请确保在设计它们时考虑到松散耦合,以便当您只想测试服务类本身内部的逻辑时,可以模拟出每个依赖项。

例如,在以下服务中,我使用"穷人的依赖注入"分解数据访问存储库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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服务本身。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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

服务的使用者并不关心服务的底层内容。
为了真正测试您的服务层,我认为您的层需要深入到DLL和数据库并至少编写CRUD测试。


服务单元测试数据库应用程序

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢