Я зависаю при указании фиктивных данных, которые должны быть возвращены из фиктивного репозитория. Мой метод тестирования:

[TestMethod]
public void GetAllImports_SomeImportRecordsExist_ReturnsNonEmptyList() {
    // Arrange
    var repo = new Mock<IImportRepository>();
    repo.Setup(import => import.GetAll()).Returns(new[] {new Import()});

    var manager = new ImportConfigurationManager(repo.Object);

    // Act
    var result = manager.GetAllImports();

    // Assert
    Assert.IsNotNull(result);
    Assert.IsInstanceOfType(result, typeof (IList<Import>));
    Assert.IsTrue(result.Any());
}

Последнее утверждение завершается ошибкой, поскольку тестируемый менеджер возвращает пустой список. Менеджер:

public class ImportConfigurationManager : IImportConfigurationManager
{
    private readonly IImportRepository _importRepository;

    public ImportConfigurationManager(IImportRepository repository)
    {
        _importRepository = repository;
    }

    public IList<Import> GetAllImports() {
        return _importRepository.GetAll(import => import) ?? new Import[0];
    }
}

Я прошел через тест и наблюдал, как менеджер, вызывающий GetAll, возвращает значение null, поэтому я считаю, что моя ошибка заключается в настройке экземпляра фиктивного репозитория. Любая помощь приветствуется.

Обновить

Патрик указал, что я по-разному звонил в GetAll в своем менеджере и в тесте. Последовательность вызовов (в любом направлении) решает проблему. Спасибо.

0
Michael Ross 12 Авг 2014 в 23:20
3
Похоже, есть две версии IImportRepository.GetAll(), одна без аргументов (указанная в вашей макетной настройке), а другая с лямбда-выражением (используется в диспетчере). Это проблема?
 – 
Patrick Quirk
12 Авг 2014 в 23:42
Хороший улов, это сделало свое дело.
 – 
Michael Ross
13 Авг 2014 в 00:22
@spock, выполнив больше тестов, я теперь также использую параметр стиля 'is any', когда мой тест не касается параметров. Патрик уловил мою проблему, но я согласен с вашей настройкой, помеченной как ответ. Спасибо!
 – 
Michael Ross
17 Июн 2015 в 23:11

1 ответ

Лучший ответ

Ниже может помочь. Получаю список импорта. Верните список в свою настройку и убедитесь, что Func настроен правильно.

    public class ImportConfigurationManager : IImportConfigurationManager
    {
        private readonly IImportRepository _importRepository;

        public ImportConfigurationManager(IImportRepository repository)
        {
            _importRepository = repository;
        }

        public IList<Import> GetAllImports()
        {
            var imports = _importRepository.GetAll(import => import) ?? new Import[0];
            return imports;
        }
    }

    public interface IImportRepository
    {
        IList<Import> GetAll(Func<object, object> func);
    }

    public interface IImportConfigurationManager
    {
    }

    [TestMethod]
    public void GetAllImports_SomeImportRecordsExist_ReturnsNonEmptyList()
    {
        // Arrange
        var repo = new Mock<IImportRepository>();
        repo.Setup(import => import.GetAll(It.IsAny<Func<object, object>>())).Returns(new List<Import>(){new Import()});

        var manager = new ImportConfigurationManager(repo.Object);

        // Act
        var result = manager.GetAllImports();

        // Assert
        Assert.IsNotNull(result);
        Assert.IsInstanceOfType(result, typeof(IList<Import>));
        Assert.IsTrue(result.Any());
    }
1
Spock 21 Авг 2014 в 06:15