Verify() 如果测试方法抛出异常。我们可以避免 try-catch 吗?

Verify() if testing method throws exception. Can we avoid try-catch?

我有一个测试方法:

[Fact]
public void Test001()
{
    var mock = new Mock<IValidator>();

    var sut = new Sut(mock.Object);

    try
    {
        Action a = () => sut.TestedMethod();

        a.Should().Throw<ArgumentException>();
    }
    catch { }

    mock.Verify(x => x.IsValid(), Times.Once);
}

和一个TestedMethod:

public void TestedMethod()
{
    _ = _validator.IsValid();

    throw new ArgumentException();
}

这里有没有办法摆脱try-catch?

然而,当消除try-catch时,自然地,Verification总是失败。

有什么好的解决方法吗?

如果您要使用 xunit 的 built-in Throws 函数(而不是 FluentAssertion),那么您不需要 try-catch 块。

只是:

Assert.Throws<ArgumentException>(() => sut.TestedMethod());

更新#1

Assert.Throws不会抛出异常。它 returns 捕获异常以允许进一步评估,如下所示:

var actualException = Assert.Throws<ArgumentException>(() => sut.TestedMethod());
Assert.Equal(expectedErrorMessage, actualExcepion.Message);

因为它没有抛出异常,所以测试可以通过 Verify check

继续执行