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

如何创建检查记录是否已存在于数据库中的测试

  •  1
  • Igor  · 技术社区  · 6 年前

    我正在使用xUnit为一个需要查询数据库以验证记录已经存在的方法创建单元测试。在我的测试中,我使用NSubstitute Mock 我的仓库。

    public class MyTestClass
    {
        public MyTestClass()
        { 
            myRepository = Substitute.For<IMyRepository>();
        }
    
        [Fact]
        public void My_Test()
        {
            var myService = new MyService(myRepository);
    
            var result = myService.Create(mockObject);
    
            ....
        }
    

    这是我引用的服务的实现:

    public class MyService
    {
        public MyService(IMyRepository repository)
        {
            _repository = repository
        }
    
        IMyRepository _repository;
    
        public X Create(MyObject mockObject)
        {
            var result =  _repository.CheckIfExists(mockObject.Name); //This return an NAME for example;
    
            if (result == mockObject.Name)
            {
                return X.Error("Message...")
            }
        }
    }
    

    问题是:

    如何测试 if (result == mockObject.Name) 因为我的仓库是假的?我需要这个信息 return X.Error("Message...") 在测试课上。

    如何测试这段代码?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nkosi    6 年前

    需要将mock/substitute配置为与测试预期的行为一致

    例如

    public class MyTestClass {
        public MyTestClass()  
            myRepository = Substitute.For<IMyRepository>();
        }
    
        [Fact]
        public void My_Test() {
            //Arrange
            myRepository.CheckIfExists(mockObject.Name).Returns(mockObject.Name);
    
            var myService = new MyService(myRepository);
    
            //Act
            var result = myService.Create(mockObject);
    
            //Assert
            //....check that the returned result is as expected.
        }
    }