У меня есть метод ниже, который является простым модульным тестом для метода, использующего 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();
}