【问题标题】:Mocking a repository with Moq使用 Moq 模拟存储库
【发布时间】:2014-07-11 05:52:04
【问题描述】:

为了模拟存储库,我使用下面的代码。我不明白为什么变量empl 总是null

你知道我错过了什么吗?

谢谢,

[TestMethod]
public void Test()
{
    var employee = new Employee { EmployeeID = 1, Code = "Code", FirstName = "MyFirstName", LastName = "MyName" };

    var employeeRepository = new Mock<IEmployeeRepository>();
    employeeRepository.Setup(x => x.Add(employee)).Verifiable();

    var employeeService = new EmployeeService(employeeRepository.Object);
    var empl = employeeService.GetById(1);

    Assert.IsNotNull(empl);
}

public class Employee
{
    public int EmployeeID { get; set; }
    public string Code { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public interface IEmployeeRepository : IBaseRepository<Employee> {}

public interface IBaseRepository<TEntity>
{
    IQueryable<TEntity> Get();
    TEntity Add(TEntity entity);
    void Delete(int id);
    int Count();
}

public class EmployeeService
{
    private IEmployeeRepository _employeeRepository;

    public EmployeeService(IEmployeeRepository employeeRepository)
    {
        _employeeRepository = employeeRepository;
    }

    public Employee GetById(int id)
    {
        return _employeeRepository.Get().FirstOrDefault(x => x.EmployeeID == id);
    }

    public void Add(Employee employee)
    {
        _employeeRepository.Add(employee);
    }
}

【问题讨论】:

    标签: c# unit-testing mocking repository moq


    【解决方案1】:

    你在嘲笑错误的方法。模拟Get

    employeeRepository.Setup(x => x.Get()).Returns(new[] { employee });
    

    Mock 是一个假对象,它在方法中没有任何逻辑。你必须告诉它它应该如何表现(设置),以便在你的测试中可以重放这个行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2011-05-27
      • 2015-09-08
      • 1970-01-01
      相关资源
      最近更新 更多