【问题标题】:Object not set as an instance of an object in rhino mocks对象未设置为 rhino 模拟中的对象实例
【发布时间】:2014-02-11 16:09:03
【问题描述】:

更新:3

我试图模拟一个类用于通过工作单元创建其他类的新实例的方法。当我尝试模拟返回固定数据的方法时,当调用 getPage 方法时,我得到的是 null 而不是列表。

这是我的代码

[TestFixture()]
public class CustomerServiceTests
{
    private ICustomerService service;
    private IUnitOfWork mockUnitOfWork;
    private IGenericRepository<Entities.Customer> repository;

    private int customerId;
    private int ContactId;

    [SetUp()]
    public void Setup()
    {
        customerId = 1;
        ContactId = 1;
    }

  [Test()]
    public void GetCustomers_should_return_three_results()
    {
        mockUnitOfWork = MockRepository.GenerateMock<IUnitOfWork>();
        repository = MockRepository.GenerateMock<IGenericRepository<Entities.Customer>>();

        List<Entities.Customer> customerList = new List<Entities.Customer>
        {
            new Entities.Customer { Id = 1, CompanyName = "test1", ContractorId = 1 },
            new Entities.Customer { Id = 2, CompanyName = "test2", ContractorId = 2 },
            new Entities.Customer { Id = 3, CompanyName = "test3", ContractorId = 1 },
            new Entities.Customer { Id = 4, CompanyName = "test4", ContractorId = 1 },
            new Entities.Customer { Id = 5, CompanyName = "test5", ContractorId = 4 }
        };


        var IQueryableList = customerList.AsEnumerable();            
        mockUnitOfWork.Stub(uow => uow.CustomerRepository).Return(repository);




        repository.Stub(repo => repo.GetPaged()).Return(new ContentList<Entities.Customer> { List = IQueryableList, Total = customerList.Count });

        service = new CustomerService(mockUnitOfWork);

        var resultList = service.GetCustomers(new PageRequest {PageSize = 20, PageIndex = 1 });
        var total = resultList.Data.Total;
        Assert.AreEqual(10, total);
    }

服务代码部分返回 null 而不是提供的列表。

            customers = _service.CustomerRepository.GetPaged(filter, orderBy, pageRequest.PageSize, pageRequest.PageIndex, "CustomersContacts");

【问题讨论】:

  • 更新后的代码中的服务是什么类型?
  • 那是客户服务。它是我运行测试的方法。
  • 您能否添加更多代码来展示您是如何创建客户服务的?我想我可能知道这个问题。
  • 我已在更新 2 中包含客户服务代码设置。
  • 您还在收到 NullReferenceException 吗?当我运行它时(尽管我的实现可能不同),我得到一个测试失败:预期:10 但是:5

标签: c# asp.net unit-testing mocking nunit


【解决方案1】:

你为 GetPaged 设置了一个不带参数的存根

GetPaged()

但是您正在使用参数调用 GetPaged

GetPaged(filter, orderBy, pageRequest.PageSize, pageRequest.PageIndex, "CustomersContacts")

试试这样的(你需要验证语法,确保它是正确的类型)

repository
    .Stub(repo => repo.GetPaged(
        Arg<string>.Is.Anything, 
        Arg<string>.Is.Anything,  
        Arg<int>.Is.Anything, 
        Arg<int>.Is.Anything, 
        Arg<string>.Is.Anything))
    .Return(new ContentList<Entities.Customer> { List = IQueryableList, Total = customerList.Count });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-17
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多