-2

我可以尝试了解起订量以及它是如何工作的?什么时候应该使用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 作为结果。

4

2 回答 2

0
  mockObject.Setup(x => x.CalculateDiscount(It.IsAny<int>(), It.IsAny<int>())).Returns(360);
于 2018-08-28T12:37:25.410 回答
-1

_product上面没有使用对象CalculateDiscount方法。因此,您的模拟对象的设置不会受到影响。您可以在您的产品类中尝试这样做:

public bool GiveCard()
{
    return _product.CalculateDiscount(Price, Discount) > 300;
} 

在这种情况下,给定的模拟对象 CalculateDiscount 方法被命中并为您返回 360。

如果您仍然使用这样的设置:mockObject.Setup(x => x.CalculateDiscount(450, 20)).Returns(360);,您应该提供productService.Price450 和productService.Discount20

注意:您还可以断言 mockObject 函数是否被命中:

mockObject.Verify(mock => mock.CalculateDiscount(450,20), Times.Once());
于 2018-08-28T20:45:41.353 回答