代码之家  ›  专栏  ›  技术社区  ›  punkouter

我该怎么做呢?

  •  2
  • punkouter  · 技术社区  · 7 年前

    我试着从基本的开始,但是很难理解如何创建这个moq对象。

     public class TestRefMedicalSpecialty
    {
        private Mock<IRepository<RefMedicalSpecialty>> mockRefMedicalRepo;
    
        public TestRefMedicalSpecialty()
        {
            var mockRefMedicalSpecialties = new List<RefMedicalSpecialty>
            {
                new RefMedicalSpecialty {Code = "10000", Description = "Medical Specialty1"},
                new RefMedicalSpecialty {Code = "10001", Description = "Medical Specialty2"},
                new RefMedicalSpecialty {Code = "10002", Description = "Medical Specialty3"}
            };
    
            mockRefMedicalRepo = new Mock<IRepository<RefMedicalSpecialty>>();
    
            mockRefMedicalRepo.Setup(repo => repo.GetAll()).Returns(mockRefMedicalSpecialties);
    
           // this.mockRefMedicalRepo = new Mock<IRepository<RefMedicalSpecialty>>().Object;
            this.mockRefMedicalRepo = mockRefMedicalRepo.Object;
        }
    
        [Fact]
        public void GetAll_Returns_Data()
        {
    
        }
    }
    

    严重性代码描述项目文件行禁止显示状态 错误CS0266无法隐式转换类型' Aamc.Ret.Data.IRepository<Aamc.Ret.Data.Models.RefMedicalSpecialty> “to” Moq.Mock<Aamc.Ret.Data.IRepository<Aamc.Ret.Data.Models.RefMedicalSpecialty>> '.存在显式转换(是否缺少强制转换?)aamc.ret.unittests公司

    1 回复  |  直到 7 年前
        1
  •  3
  •   Nkosi    7 年前

    Mock<T>.Object 属性返回泛型参数的模拟 T .

    所以在你的情况下 mockRefMedicalRepo.Object 是一个 IRepository<RefMedicalSpecialty> 但是你想把它分配给 Mock<IRepository<RefMedicalSpecialty>> 作为错误消息的状态。

    这里有一个可能的选择

    public class TestRefMedicalSpecialty {
        private IRepository<RefMedicalSpecialty> mockRefMedicalRepo;
    
        public TestRefMedicalSpecialty() {
            var mockRefMedicalSpecialties = new List<RefMedicalSpecialty>
            {
                new RefMedicalSpecialty {Code = "10000", Description = "Medical Specialty1"},
                new RefMedicalSpecialty {Code = "10001", Description = "Medical Specialty2"},
                new RefMedicalSpecialty {Code = "10002", Description = "Medical Specialty3"}
            };
    
            var mock = new Mock<IRepository<RefMedicalSpecialty>>();
    
            mock.Setup(_ => _.GetAll()).Returns(mockRefMedicalSpecialties);
    
            this.mockRefMedicalRepo = mock.Object;
        }
    
        [Fact]
        public void GetAll_Returns_Data() {
    
            //pass the mocked repo into a dependent class and 
            //exercise test that relies on calling GetAll
    
        }
    }
    

    参考 Moq Quickstart 更好地了解如何使用MOQ框架