设置返回虚拟数据时,Moq调用返回空

时间:2014-08-12 19:20:56

标签: c# unit-testing nunit ninject moq

在指定要从模拟存储库返回的模拟数据时,我挂了电话。我的测试方法:

[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。使呼叫保持一致(向任一方向)解决了问题。感谢。

1 个答案:

答案 0 :(得分: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());
    }