我有一個測驗方法:
[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 總是失敗。
有什么漂亮的解決方法嗎?
uj5u.com熱心網友回復:
如果您使用 xunit 的內置Throws函式(而不是 FluentAssertion),那么您不需要該try-catch塊。
簡單地說:
Assert.Throws<ArgumentException>(() => sut.TestedMethod());
更新#1
Assert.Throws不會拋出例外。它回傳捕獲的例外以允許進一步評估,如下所示:
var actualException = Assert.Throws<ArgumentException>(() => sut.TestedMethod());
Assert.Equal(expectedErrorMessage, actualExcepion.Message);
由于它不會拋出例外,因此測驗可以通過Verify檢查繼續執行
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458726.html
下一篇:ChannelReader<T>.ReadAllAsync被CancellationToken取消時是否會拋出任何例外?
