3つの可能な例外のタイプから1つをチェックする必要があります。これらのいずれかがスローされた場合、テストは正常に完了する必要があります。いくつかのシナリオでは[Theory]
と[MemberData]
を使用しています。XUnit Assert.IsType()複数の予想される型を持つ
[Theory]
[MemberData(nameof(GetInvalidMimeMessages))]
public async Task ProcessAsync_TestFail(MimeMessage message)
{
var stub = Mock.Of<IOptions<ScrapyardFilesOptions>>(s => s.Value.ConnectionString == "UseDevelopmentStorage=true" && s.Value.Container == "exchange");
var loggerMock = new Mock<ILogger<ScrapyardFilesHandler>>(MockBehavior.Loose);
var scrapyard = new ScrapyardFilesHandler(loggerMock.Object, stub);
var ex = await Assert.ThrowsAnyAsync<Exception>(() => scrapyard.ProcessAsync(message));
// imagine solution somehow like that
Assert.IsType(
{
typeof(NullReferenceException) ||
typeof(KeyNotFoundException) ||
typeof(InvalidOperationException) ||
},
ex);
}
private static IEnumerable<object[]> GetInvalidMimeMessages()
{
yield return new object[] { null };
yield return new object[] { new MimeMessage() };
yield return new object[]
{
new MimeMessage(
new List<InternetAddress>(),
new InternetAddressList() { new MailboxAddress("[email protected]"), new MailboxAddress("[email protected]"), },
string.Empty,
MimeEntity.Load(ParserOptions.Default, Stream.Null))
};
yield return new object[]
{
new MimeMessage(
new List<InternetAddress>(),
new InternetAddressList() { new MailboxAddress("[email protected]"), new MailboxAddress("[email protected]"), },
string.Empty,
MimeEntity.Load(ParserOptions.Default, Stream.Null))
};
}
このようなアサーションを取得するにはどうすればよいですか?
:
しかし、複数のものを使用すると、古き良きのtry-catchを使用することができます。you'reは、唯一の例外のアップ、あなたはこれを使用することができれば'代わりに? – HimBromBeere
1つの入力で1つのアクションで複数の例外が発生するのはなぜですか? – CodeCaster
テストに複数のメッセージを渡すため、1つの例外が返されるはずですが、どのメッセージが例外を投げたのかわからないためです。 – CodeCaster