如何在最小起订量中使用设置方法?
How to use setup method in moq?
我可以尝试了解 Moq 及其工作原理?我们什么时候应该使用设置方法?在我看来,它的文档太poor.Anyway了。我想分享我的代码和我想做的事情。
Class正在测试中。
public interface IProduct
{
bool GiveCard();
float CalculateDiscount(decimal price, decimal discount);
}
public class Product : IProduct
{
private IProduct _product;
public string ProductName { get; set; }
public int StockCount { get; set; }
public float Discount { get; set; }
public float Price { get; set; }
public float CalculateDiscount(decimal price, decimal discount)
{
var discountedPrice = (price * discount) / 100;
Discount = price - discountedPrice;
return price - discountedPrice;
}
public bool GiveCard()
{
return CalculateDiscount(Price, Discount) > 300;
}
}
**单元测试Class*
[Test]
public void GiveCard_DiscountedAmountGreaterThanOrEqual300_ReturnTrue()
{
var mockObject = new Mock<IProduct>();
var productService = new Product(mockObject.Object);
mockObject.Setup(x => x.CalculateDiscount(450, 20)).Returns(360);
var result = productService.GiveCard();
Console.WriteLine(result);
}
尽管我在 CalculateDiscount() 方法中将计算结果设置为折扣 属性,但结果为 0。
mockObject.Setup(x => x.CalculateDiscount(It.IsAny<int>(), It.IsAny<int>())).Returns(360);
_product
object CalculateDiscount
上面没有使用方法。因此,您的模拟对象的设置不会受到影响。您可以在您的产品 class 中尝试这样做:
public bool GiveCard()
{
return _product.CalculateDiscount(Price, Discount) > 300;
}
在这种情况下,给定的模拟对象 CalculateDiscount 方法被命中,return 360 为你。
如果您使用像这样的静态设置:mockObject.Setup(x => x.CalculateDiscount(450, 20)).Returns(360);
,您应该提供 productService.Price
作为 450 和 productService.Discount
作为 20
注意:您还可以断言 mockObject 函数是否被命中:
mockObject.Verify(mock => mock.CalculateDiscount(450,20), Times.Once());
我可以尝试了解 Moq 及其工作原理?我们什么时候应该使用设置方法?在我看来,它的文档太poor.Anyway了。我想分享我的代码和我想做的事情。
Class正在测试中。
public interface IProduct
{
bool GiveCard();
float CalculateDiscount(decimal price, decimal discount);
}
public class Product : IProduct
{
private IProduct _product;
public string ProductName { get; set; }
public int StockCount { get; set; }
public float Discount { get; set; }
public float Price { get; set; }
public float CalculateDiscount(decimal price, decimal discount)
{
var discountedPrice = (price * discount) / 100;
Discount = price - discountedPrice;
return price - discountedPrice;
}
public bool GiveCard()
{
return CalculateDiscount(Price, Discount) > 300;
}
}
**单元测试Class*
[Test]
public void GiveCard_DiscountedAmountGreaterThanOrEqual300_ReturnTrue()
{
var mockObject = new Mock<IProduct>();
var productService = new Product(mockObject.Object);
mockObject.Setup(x => x.CalculateDiscount(450, 20)).Returns(360);
var result = productService.GiveCard();
Console.WriteLine(result);
}
尽管我在 CalculateDiscount() 方法中将计算结果设置为折扣 属性,但结果为 0。
mockObject.Setup(x => x.CalculateDiscount(It.IsAny<int>(), It.IsAny<int>())).Returns(360);
_product
object CalculateDiscount
上面没有使用方法。因此,您的模拟对象的设置不会受到影响。您可以在您的产品 class 中尝试这样做:
public bool GiveCard()
{
return _product.CalculateDiscount(Price, Discount) > 300;
}
在这种情况下,给定的模拟对象 CalculateDiscount 方法被命中,return 360 为你。
如果您使用像这样的静态设置:mockObject.Setup(x => x.CalculateDiscount(450, 20)).Returns(360);
,您应该提供 productService.Price
作为 450 和 productService.Discount
作为 20
注意:您还可以断言 mockObject 函数是否被命中:
mockObject.Verify(mock => mock.CalculateDiscount(450,20), Times.Once());