У меня есть такая система
class Sut
{
IRepository _repo;
public Sut(IRepository repo) { _repo = repo; }
async Task Handle(Request request)
{
var entity = new Entity(request.Id); //=> if Id is not ok the Entity throws Exception
_repo.Save(entity);
}
}
Это тест
[Fact]
public async Task Test_Save()
{
Mock<IRepository> repositoryMock = new Mock<IRepository>();
repositoryMock
.Setup(repo => repo.Save(It.IsAny<Entity>()))
.Returns(Task.CompletedTask);
var sut = new Sut(repositoryMock.Object);
/// Act
Action action = async () => await sut.Handle(new Request { Id = default(Guid)});
/// Assert
Assert.Throws<Exception>(action);
repositoryMock.Verify(repo => repo.Save(It.IsAny<Entity>(), Times.Never);
}
Итак, Entity
имеет проверку по умолчанию Guid
, являющуюсяперешел на это.Если значение по умолчанию передано, оно выдаст исключение.
Исключение выдается, но тест завершается с этим сообщением.
Сообщение: Assert.Throws ()
Ожидается сбой: typeof (System.Exception)
Факт: (не было сгенерировано исключение)
Тест никогда не вызывает
repositoryMock.Verify(repo => repo.Save(It.IsAny<Entity>(), Times.Never);
, он прервется в этой строке
Почему этои как решить эту ситуацию?
Assert.Throws<Exception>(action);
ОБНОВЛЕНИЕ
public Entity(Guid id)
{
if (default(Guid) == id) throw new Exception("cannot have a default value for id");
Id = id;
}