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
继续执行
我有一个测试方法:
[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