使用Moq安排单元测试

蔡斯·哈丁

我创建了一个名为的方法,ListOfPeople并尝试为其编写单元测试目前,我在设置“单元测试Arrange部分时遇到了麻烦我不能,因为现在我的运行状态PeopleIdPersonGroupJobIdCannot resolve symbol

问题: 如何成功测试此方法?

我的方法:

public IEnumerable<Person> ListOfPeople(int personId, int? jobId)
        {
            var people = _unitOfWork.GetRepository<DB.Person>().GetAll()
              .Where(p => p.PeopleGroups.Any(m => m.PeopleId == personId 
                              && m.PersonGroupdJobId == jobId));

            if (!people.Any())
                return new List<Person>();

            var personData = people.Select(p => new Person
            {
                Id = p.PersonId,
                Name = p.PersonName,
                WorkTypeId = p.WorkTypeId,
                PrimaryLanguage = p.PrimaryLanguage,
                PeopleGroups = p.PeopleGroups.ToList()
                  .Select(pp => new PeopleGroup
                  {
                      Id = pp.ProjectPartyId,
                      PeopleId = pp.PeopleId,
                      JobId = pp.PersonGroupJobId ?? 0,
                      AddressId = pp.AddressId
                  })
            }).ToList();

            return personData;
        }

单元测试:

[TestMethod]
    public void ListOfPeople_peopleExist_returnsList()
    {
        // Arrange
        var people = new List<DB.Person>
        {    
            PeopleId = It.IsAny<int>(),
            PersonGroupdJobId = It.IsAny<int>()
        }; 

        _uowMock
            .Setup(mock => mock.GetRepository<DB.Person>().GetAll())
            .Returns(people.AsQueryable());

        // Act
        var result = _repository.ListOfPeople(It.IsAny<int>(), It.IsAny<int>());

        // Assert
        Assert.IsNotNull(result);
        Assert.AreEqual(2, result.Count());

        _unitOfWork.Verify(mock => mock.Commit(), Times.Never());
        _unitOfWork.Verify(mock => mock.GetRepository<DB.Person>().GetAll(), Times.Once());
    }
斯图尔特

您没有Moq's It正确使用匹配器。匹配器旨在用于MoqSetupVerify通话(例如,请参阅此处的示例用法)

  • 在安排中,It.IsAny创建虚假数据时不应使用use 将会发生的所有事情It.IsAny<>就是将值赋值default(Type),即Ints等为零,这将无用。

var people = new List<DB.Person>
 {
   new DB.Person
   {        
       PeopleId = 1234, // Some traceable value and NOT It.IsAny<int>(),
       PersonGroupdJobId = 987,
       ...
  • 在操作步骤中,您需要使用执行场景的值(再次,而不仅仅是It.IsAny<>调用被测方法

var result = _repository.ListOfPeople(1234, 567); // Filters matching your test scenario

另外,由于要测试的方法至少涉及两个方面,即对存储库应用过滤器,然后将数据库实体映射到另一个POCO,因此您需要提供完整的输入数据集,以便可以证明所有输入字段映射到输出字段。

如果将所有这些放在一起,则单元测试将类似于:

[Test]
public void ListOfPeople_peopleExist_returnsList()
{
    // Arrange : Generate fake data
    var people = new List<DB.Person>
    {    
        new DB.Person
        {
            PersonId = 123,
            PersonName = "Bob",
            PrimaryLanguage = "French",
            WorkTypeId = 987,
            PeopleGroups = new []
            {
                new DB.PeopleGroup
                {
                    AddressId = 123,
                    PersonGroupJobId = 999,
                    PeopleId = 123, // Match the parent ID
                    ProjectPartyId = 3
                }
            }
        }
    };

    // Your _unitOfWork and _repository mocks seem to be class private fields
    var _unitOfWork = new Mock<IUnitOfWork>();

    _unitOfWork
        .Setup(mock => mock.GetRepository<DB.Person>().GetAll())
        .Returns(people.AsQueryable());

    var _repository = new MyRepo(_unitOfWork.Object);

    // Act
    var result = _repository.ListOfPeople(123, 999);

    // Assert
    Assert.IsNotNull(result);
    Assert.AreEqual(1, result.Count(r => r.Name == "Bob" 
                                         && r.Id == 123 
                                         && r.PeopleGroups.First().Id == 3));
  //... etc - ensure all the fields are mapped 

    _unitOfWork.Verify(mock => mock.Commit(), Times.Never());
    _unitOfWork.Verify(mock => mock.GetRepository<DB.Person>().GetAll(), 
                       Times.Once());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Moq的单元测试cosmosDb方法

来自分类Dev

使用Moq进行单元测试

来自分类Dev

使用 Moq 框架进行单元测试

来自分类Dev

如何使用Jenkins安排C#单元测试?

来自分类Dev

如何在单元测试中使用moq对象?

来自分类Dev

使用moq模拟HttpContext进行单元测试

来自分类Dev

使用Moq进行单元测试,但对象返回Null

来自分类Dev

使用Moq对dbContext进行单元测试添加操作

来自分类Dev

使用vstest.consol.exe运行Moq单元测试

来自分类Dev

如何使用Moq单元测试我的RelayCommand?

来自分类Dev

在使用Moq的单元测试中,IdependencyResolver始终为null

来自分类Dev

单元测试-使用SetOwinContext的Moq抽象类

来自分类Dev

使用Moq和Autofac进行单元测试

来自分类Dev

使用 Moq 和接口进行单元测试

来自分类Dev

安排单元测试的时间,包括设置

来自分类Dev

moq进行单元测试的通用方法

来自分类Dev

MOQ单元测试-返回类型

来自分类Dev

单元测试-如何使用MOQ进行MOQ WCF客户端

来自分类Dev

使用Moq进行单元测试的通用工作单元和存储库模式框架

来自分类Dev

使用Moq进行单元测试的工作单元和通用存储库模式框架

来自分类Dev

EF通用存储库和工作单元-使用Moq进行单元测试

来自分类Dev

使用中央 DI 逻辑进行单元测试并最小化“安排”阶段

来自分类Dev

在使用Moq和AutoFixture进行单元测试API时模拟HttpResponseMessage

来自分类Dev

如何使用Moq模拟SoapException进行单元测试错误处理

来自分类Dev

我的模拟DbContext使用Moq在单元测试中写入db

来自分类Dev

如何在单元测试中使用Moq和DbFunction来防止NotSupportedException?

来自分类Dev

您是否应该在单元测试中使用Moq提供的“ Verify”和“ VerifyAll”方法?

来自分类Dev

使用XUnit和MOQ进行单元测试OData V4 PUT操作

来自分类Dev

如何使用Moq框架对Azure Service Fabric进行单元测试?

Related 相关文章

  1. 1

    使用Moq的单元测试cosmosDb方法

  2. 2

    使用Moq进行单元测试

  3. 3

    使用 Moq 框架进行单元测试

  4. 4

    如何使用Jenkins安排C#单元测试?

  5. 5

    如何在单元测试中使用moq对象?

  6. 6

    使用moq模拟HttpContext进行单元测试

  7. 7

    使用Moq进行单元测试,但对象返回Null

  8. 8

    使用Moq对dbContext进行单元测试添加操作

  9. 9

    使用vstest.consol.exe运行Moq单元测试

  10. 10

    如何使用Moq单元测试我的RelayCommand?

  11. 11

    在使用Moq的单元测试中,IdependencyResolver始终为null

  12. 12

    单元测试-使用SetOwinContext的Moq抽象类

  13. 13

    使用Moq和Autofac进行单元测试

  14. 14

    使用 Moq 和接口进行单元测试

  15. 15

    安排单元测试的时间,包括设置

  16. 16

    moq进行单元测试的通用方法

  17. 17

    MOQ单元测试-返回类型

  18. 18

    单元测试-如何使用MOQ进行MOQ WCF客户端

  19. 19

    使用Moq进行单元测试的通用工作单元和存储库模式框架

  20. 20

    使用Moq进行单元测试的工作单元和通用存储库模式框架

  21. 21

    EF通用存储库和工作单元-使用Moq进行单元测试

  22. 22

    使用中央 DI 逻辑进行单元测试并最小化“安排”阶段

  23. 23

    在使用Moq和AutoFixture进行单元测试API时模拟HttpResponseMessage

  24. 24

    如何使用Moq模拟SoapException进行单元测试错误处理

  25. 25

    我的模拟DbContext使用Moq在单元测试中写入db

  26. 26

    如何在单元测试中使用Moq和DbFunction来防止NotSupportedException?

  27. 27

    您是否应该在单元测试中使用Moq提供的“ Verify”和“ VerifyAll”方法?

  28. 28

    使用XUnit和MOQ进行单元测试OData V4 PUT操作

  29. 29

    如何使用Moq框架对Azure Service Fabric进行单元测试?

热门标签

归档