在指定要从模拟存储库返回的模拟数据时,我挂了电话。我的测试方法:
[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 :(得分: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());
}