我正在做單元測試(C#),我有一些返回void的方法。我想知道什麼是模擬這些方法的最佳方法?如何測試返回void的方法?
下面是一段代碼: -
public void DeleteProduct(int pId)
{
_productDal.DeleteProduct(pId);
}
我正在做單元測試(C#),我有一些返回void的方法。我想知道什麼是模擬這些方法的最佳方法?如何測試返回void的方法?
下面是一段代碼: -
public void DeleteProduct(int pId)
{
_productDal.DeleteProduct(pId);
}
您可以測試的是使用正確的參數調用ProductDAL.DeleteProduct。 這可以通過使用依賴注入和嘲笑來完成!
樣品使用Moq作爲嘲諷的框架:
public interface IProductDal
{
void DeleteProduct(int id);
}
public class MyService
{
private IProductDal _productDal;
public MyService(IProductDal productDal)
{
if (productDal == null) { throw new ArgumentNullException("productDal"); }
_productDal = productDal;
}
public void DeleteProduct(int id)
{
_productDal.DeleteProduct(id);
}
}
單元測試
[TestMethod]
public void DeleteProduct_ValidProductId_DeletedProductInDAL()
{
var productId = 35;
//arrange
var mockProductDal = new Mock<IProductDal>();
var sut = new MyService(mockProductDal.Object);
//act
sut.DeleteProduct(productId);
//assert
//verify that product dal was called with the correct parameter
mockProductDal.Verify(i => i.DeleteProduct(productId));
}
假設你可以模擬現場_productDal
,你要測試是否與相應的pId
記錄/對象實際被刪除。
如果您在班級中注入_productDal
,可以實現模擬,例如使用constructor injection。
你不 '假' 的單元的方法,你想測試。儘管你可能需要嘲笑它的一些依賴。 – haim770
可能重複的[單元測試無效方法?](http://stackoverflow.com/questions/246038/unit-testing-void-methods) –