【发布时间】:2019-02-03 02:14:20
【问题描述】:
我可以尝试了解起订量以及它是如何工作的?什么时候应该使用setup方法?在我看来,它的文档太差了。无论如何。我想分享我的代码和我想做的事情。
正在测试的类。
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;
}
}
**单元测试类*
[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() 方法中将计算结果设置为Discount 属性,但结果却是0。
【问题讨论】:
-
“被测类”实际上不是类。请提供课程
-
参数必须匹配 Moq 才能使用该方法。 alerya 的答案应该有效,但here is a little more information
-
mockObject.Setup(x => x.CalculateDiscount(It.IsAny<int>(), It.IsAny<int>())).Returns(360);可能足以解决您的问题。但是,您的问题没有提供足够的信息。比如productService.GiveCard()什么时候调用IProduct.CalculateDiscount(float , float )函数? -
@AdemCatamak 我认为我提供了足够的信息。对产品应用折扣时调用 GiveCard 方法。 GiveCard() 方法在总价等于或大于 300 时赠送卡片。代码说明一切。请仔细阅读。
-
我看不到无参数的 GiveCard 方法,也看不到 ProductService 类。因此,我想给你适当的帮助;如果你能提供更多的信息,你就能得到更明确的答案。
标签: c# unit-testing mocking nunit moqcontrib