写入测试方法时显示"No invocations performed"错误"Verify"



我们有一个服务正在另一个服务中使用:

namespace ConsoleCalculator.Services
{
public interface ICalculatorService
{
int GetLineCount(string inputLineCount);
}
}
namespace ConsoleCalculator.Services
{
public class CalculatorService : ICalculatorService
{
private readonly ICalculatorValidationService _calculatorValidationService;
public CalculatorService(ICalculatorValidationService calculatorValidationService)
{
_calculatorValidationService = calculatorValidationService;
}
public int GetLineCount(string inputLineCount)
{
_calculatorValidationService.ValidateLineCount(inputLineCount);
return Convert.ToInt32(inputLineCount);
}
}
}

现在我们需要为所需的服务编写一个测试:

namespace ConsoleCalculator.Test.Services
{
public class CalculatorServiceTest
{
private Mock<ICalculatorService> _calculatorService = new Mock<ICalculatorService>();
private Mock<ICalculatorValidationService> _valculatorValidationService = new Mock<ICalculatorValidationService>();
public CalculatorServiceTest()
{
_valculatorValidationService
.Setup(q => q.ValidateLineCount(It.IsRegex("[^0-9]")))
.Throws(new Exception());
_calculatorService
.Setup(q => q.GetLineCount(It.IsRegex("[^0-9]")))
.Throws(new Exception());
}

[Fact]
public void When_Input_Not_A_Number_Should_Return_Exception()
{
Assert.Throws<Exception>(() => _calculatorService.Object.GetLineCount("123a"));
}
[Fact]
public void When_Call_Method_Should_Call_Exactaly_One_ValidateLineCount_Method()
{
_calculatorService.Object.GetLineCount(It.IsAny<string>());
_valculatorValidationService.Verify(x => x.ValidateLineCount(It.IsAny<string>()), Times.Once);
}
}
}

编写第二个测试的目的是确保我的测试服务被调用一次。但在运行测试时,我看到以下错误:

Moq.MockException:需要对mock调用一次,但为0次数:x=>x.ValidateLineCount(It.IsAny(((

根据您给出的moq,验证服务方法将不会被调用,因为在调用GetLineCount时引发异常,因此测试失败。

而不是设置此moq

_calculatorService
.Setup(q => q.GetLineCount(It.IsRegex("[^0-9]")))
.Throws(new Exception());

试试这个

[Fact]
public void When_Call_Method_Should_Call_Exactaly_One_ValidateLineCount_Method()
{

var calSrvc = new CalculatorService(_valculatorValidationService.Object);

calSrvc.Object.GetLineCount(It.IsAny<string>());

_valculatorValidationService.Verify(x => x.ValidateLineCount(It.IsAny<string>()), Times.Once);
}

相关内容

最新更新