Как использовать метод настройки в moq?
Я могу попытаться понять Moq и как это работает? Когда мы должны использовать метод настройки? На мой взгляд, его документация слишком плохая. Во всяком случае. Я хочу поделиться своим кодом и тем, что я хотел сделать.
Класс тестируется.
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);
}
В качестве результата я получаю 0, хотя я установил результат вычисления для свойства Discount в методе CalculateDiscount().
2 ответа
_product
объект CalculateDiscount
метод не используется выше. Следовательно, установка вашего фиктивного объекта не получает удар. Вы можете попробовать это в своем классе продукта:
public bool GiveCard()
{
return _product.CalculateDiscount(Price, Discount) > 300;
}
В этом случае заданный метод фиктивного объекта CalculateDiscount получает удар и возвращает 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());
mockObject.Setup(x => x.CalculateDiscount(It.IsAny<int>(), It.IsAny<int>())).Returns(360);