Examples on how to test and assert exceptions with FluentAssertions.
with * it checks it contains the string. if you want exact matching, remove them
[Fact]
public async Task CreateAnimal_IsNull_ExceptionThrown()
{
// ARRANGE
Animal? animal = null;
// ACT
var act = async () => await sut.Create(animal);
// ASSERT
await act.Should().ThrowAsync<ArgumentNullException>()
.WithMessage("*is null*");
}