세 가지 가능한 예외 유형 중 하나를 선택해야합니다. 이들 중 하나가 던져지면 테스트가 성공적으로 완료되어야합니다. 몇 가지 시나리오에서 [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))
};
}
어떻게 그런 주장을 할 수 있습니까?
을 '대신? – HimBromBeere
하나의 입력으로 한 동작으로 여러 예외가 발생할 수 있습니까? – CodeCaster
하나의 메시지가 한 가지 예외로 돌아와야합니다. 이제는 여러 메시지를 테스트에 전달하지만 어떤 메시지가 예외를 던 졌는지 알지 못합니다. – CodeCaster