我们有一大堆DLL,可以让我们访问我们的数据库和其他应用程序和服务。
我们用一个薄的WCF服务层包装了这些DLL,然后我们的客户端就可以使用它了。
我不太确定如何编写只测试WCF服务层的单元测试。我应该只为DLL编写单元测试,为WCF服务编写集成测试吗?我会感激任何智慧的。我知道,如果我的单元测试真的进入数据库,它们实际上就不是真正的单元测试。我也知道我并不真的需要在单元测试中测试WCF服务主机。
因此,我对测试什么以及如何测试感到困惑。
发布于 2008-09-01 02:27:57
您的服务的使用者并不关心您的服务下面是什么。要真正测试您的服务层,我认为您的层需要深入到DLL和数据库,并至少编写CRUD测试。
发布于 2008-09-01 02:26:40
如果您想对您的WCF服务类进行单元测试,请确保您在设计它们时考虑到了松散耦合,这样您就可以模拟出每个依赖项,因为您只想测试服务类本身的逻辑。
例如,在下面的服务中,我使用"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
在客户端,您可以使用服务契约的接口模拟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
发布于 2008-09-01 19:19:36
这取决于瘦WCF服务的作用。如果它真的很薄,并且没有有趣的代码,那么就不要费心对它进行单元测试。如果没有真正的代码,不要害怕不进行单元测试。如果测试不能比测试下的代码简单至少一个级别,那就别费心了。如果代码是哑巴,那么测试也是哑巴。你不会想要维护更多愚蠢的代码。
如果你的测试可以一直运行到数据库,那就太好了!这甚至更好。这不是“真正的单元测试?”这根本不是问题。
https://stackoverflow.com/questions/37375
复制相似问题