How to moq a static class with a static method (UnitOfWork case)?

后端 未结 4 2053
無奈伤痛
無奈伤痛 2021-02-08 02:10

I have these classes:

public static class UnitOfWorkSS 
{
  public static IUnitOfWork Begin()
  {
    return IoC.Resolve();
  }
}

public clas         


        
4条回答
  •  离开以前
    2021-02-08 02:29

    It looks like the only thing you are doing with the call to Begin() is returning your configured class for that particular interface: IUnitOfWork

    You really just need to make sure that your call to Begin() returns a mock implementation of IUnitOfWork

    One of two ways you can do this:

    Option One - Refactor UnitOfWorkSS so that you can set the instance of IUnitOfWork to be returned

    public static class UnitOfWorkSS  
    {
        private static IUnitOfWork _unitOfWork;
        public static IUnitOfWork UnitOfWork
        {
            set { _unitOfWork = value; }
            private get{ _unitOfWork ?? (_unitOfWork = IoC.Resolve()); }
        }
    
        public static IUnitOfWork Begin()  
        {  
            return UnitOfWork;
        }  
    }  
    
    [TestMethod]
    public void DoStuff()
    {
        var mockUnitOfWork = new Mock();
        UnitOfWorkSS.UnitOfWork = mockUnitOfWork.Object;
    
        //Do some setup and verify
    }
    

    Option Two - Simply register a mock instance of IUnitOfWork with your IoC Container

    private Mock _mockUnitOfWork;
    
    [TestInitialize]
    public void Init()
    {
        _mockUnitOfWork = new Mock();
    
        //Making a lot of assumptions about your IoC here...
        IoC.Register(_mockUnitOfWork.Object);
    }
    
    [TestMethod]
    public void DoStuff()
    {
        _mockUnitOfWork.Setup( ... );
    
        //Do some verification
    }
    

提交回复
热议问题