【发布时间】:2011-09-12 23:55:11
【问题描述】:
我有以下方法,它是使用 Moq 的方法的简单单元测试。如果我的理解是正确的,我必须创建 ProductServiceTestSubject 类以提供测试主题。我只用 Moq 试验了一个小时左右,所以可能是我忽略了功能。有没有什么方法可以实现与下面相同的效果不必创建额外的测试主题类?
[TestMethod]
public void CheckoutWithDiscountCallsTheDiscountAction()
{
// Arrange
Mock<ProductService> mockProductSvc = new Mock<ProductService>();
mockProductSvc.SetupGet(p => p.IsDiscounted).Returns(true);
mockProductSvc.Setup(p => p.DoDiscountAction()).Verifiable();
// Act
ProductServiceTestSubject.Checkout(mockProductSvc.Object);
// Assert
mockProductSvc.Verify();
}
public class ProductServiceTestSubject
{
public static void Checkout(IProductService productService)
{
productService.Checkout();
}
}
更新:这是相同的方法,不需要额外的测试主题类:
[TestMethod]
public void CheckoutWithDiscountCallsTheDiscountAction()
{
// Arrange
Mock<ProductService> mockProductSvc = new Mock<ProductService>() { CallBase = true };
mockProductSvc.SetupGet(p => p.IsDiscounted).Returns(true);
mockProductSvc.Setup(p => p.DoDiscountAction()).Verifiable();
// Act
mockProductSvc.Object.Checkout();
// Assert
mockProductSvc.Verify();
}
【问题讨论】:
标签: c# unit-testing tdd moq