В моем новом проекте .Net Core я решил использовать инфраструктуру Moq в первый раз. После того, как я создал весь метод в соответствии с уроком я все еще получаю исключение:Mocked method по-прежнему возвращает null
или после удаления всех VerifyAll() вызывает, приобретаемый нуль из Serivice. Любая идея, как ее решить?
: Зависимости
- "Microsoft.NETCore.App": "1.1.0",
- "Moq": "4.6.38-альфа",
- "XUnit": «2.2 0,0-beta5-build3474" ,
- "DotNet-тест-XUnit": "2.2.0-preview2-build1029",
Характер:
public class Character : IEntity
{
...
public Guid Key { get; set; }
...
}
Generic хранилище:
public interface IRepository<TEntity> where TEntity : class, IEntity
{
TEntity GetSingle(Expression<Func<TEntity, bool>> predicate);
...
}
Единица работы:
public interface IUnitOfWork
{
IRepository<TEntity> Repository<TEntity>() where TEntity : class, IEntity;
...
}
Символов службы:
class CharactersService : ICharactersService
{
private readonly IUnitOfWork _unitOfWork;
public CharactersService(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public Character GetCharacterByKey(Guid characterKey)
{
var charactersRepository = _unitOfWork.Repository<Character>();
var character = charactersRepository.GetSingle(ch => ch.Key == characterKey);
return character;
}
...
}
испытаний Класс:
public class CharactersServiceTest
{
[Fact]
public void GetCharacterByKey_CharacterExists_ReturnsCharacter()
{
//Arrange
var guid = Guid.NewGuid();
var characterFromDb = new Character { Key = guid };
var characterRepositoryMock = new Mock<IRepository<Character>>();
characterRepositoryMock.Setup(cr => cr.GetSingle(x => x.Key == guid)).Returns(characterFromDb);
characterRepositoryMock.VerifyAll();
var unitOfWorkMock = new Mock<IUnitOfWork>();
unitOfWorkMock.Setup(uow => uow.Repository<Character>()).Returns(characterRepositoryMock.Object);
unitOfWorkMock.VerifyAll();
var charactersService = new CharactersService(unitOfWorkMock.Object);
//Act
var character = charactersService.GetCharacterByKey(guid);
//Assert
Assert.NotNull(character);
}
}
Я уверен, что вы должны позвонить VerifyAll * после завершения теста, чтобы убедиться, что ваши ожидания были выполнены во время теста ... – Will
Я согласен с @Will, метод VerifyAll используется для убедитесь, что все ожидания были выполнены для этого издевающегося класса. Таким образом, любые методы, которые вы настроили, вы, возможно, захотите проверить, что они были вызваны правильно, поэтому функция VerifyAll является помощником, поэтому вам не нужно вызывать ее для каждой проверки, которую вы хотите сделать. –
Возможный дубликат [Настройка и проверка выражения с помощью Moq] (http://stackoverflow.com/questions/17570761/setup-and-verify-expression-with-moq) –