Moq кэширует возвращаемое значение

Кажется, что Moq - это данные кэширования, которые я установил в качестве возврата. Когда я это сделаю:

var service = new Mock<AlbumService>();
service.Setup(x => x.CreateOne()).Returns(new AlbumService().CreateOne());

он возвращает тот же самый объект, даже если AlbumService.CreateOne() возвращает новый экземпляр альбома.

Можно ли заставить Moq вызывать действие Returns каждый раз, когда я обращаюсь к CreateOne()?

Ответ 1

Это должно помочь:

var service = new Mock<AlbumService>();
service.Setup(x => x.CreateOne()).Returns(() => new AlbumService().CreateOne());

Чтобы разработать, метод Returns принимает объект возвращаемого типа или делегат, который будет оценивать тип возвращаемого значения. Делегат вызывается всякий раз, когда вызывается метод издевательства.