首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何对WCF服务进行单元测试?

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

Stack Overflow用户
提问于 2008-09-01 02:13:52
回答 3查看 14K关注 0票数 18

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

我们用一个薄的WCF服务层包装了这些DLL,然后我们的客户端就可以使用它了。

我不太确定如何编写只测试WCF服务层的单元测试。我应该只为DLL编写单元测试,为WCF服务编写集成测试吗?我会感激任何智慧的。我知道,如果我的单元测试真的进入数据库,它们实际上就不是真正的单元测试。我也知道我并不真的需要在单元测试中测试WCF服务主机。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-09-01 02:27:57

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

票数 4
EN

Stack Overflow用户

发布于 2008-09-01 02:26:40

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

例如,在下面的服务中,我使用"Poor Man's Dependency Injection“打开了我的数据访问存储库。

代码语言:javascript
复制
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服务本身。

代码语言:javascript
复制
<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
票数 7
EN

Stack Overflow用户

发布于 2008-09-01 19:19:36

这取决于瘦WCF服务的作用。如果它真的很薄,并且没有有趣的代码,那么就不要费心对它进行单元测试。如果没有真正的代码,不要害怕不进行单元测试。如果测试不能比测试下的代码简单至少一个级别,那就别费心了。如果代码是哑巴,那么测试也是哑巴。你不会想要维护更多愚蠢的代码。

如果你的测试可以一直运行到数据库,那就太好了!这甚至更好。这不是“真正的单元测试?”这根本不是问题。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档