Unit testing 通过UnityAutoMoqContainer解析依赖项

Unit testing 通过UnityAutoMoqContainer解析依赖项,unit-testing,unity-container,moq,automocking,Unit Testing,Unity Container,Moq,Automocking,我已经开始使用UnityAutoMoqContainer 我有以下两个问题,特别是关于container.GetMock()调用 我希望下面的断言能够成功,但是它抛出了一个异常 private UnityAutoMoqContainer container; [SetUp] public void SetUp() { container = new UnityAutoMoqContainer(); } [Test] public void Are_mocks_Same(){

我已经开始使用UnityAutoMoqContainer 我有以下两个问题,特别是关于container.GetMock()调用

  • 我希望下面的断言能够成功,但是它抛出了一个异常

    private UnityAutoMoqContainer container;
    
    [SetUp]
    public void SetUp()
    {
        container = new UnityAutoMoqContainer();
    }
    
    [Test]
    public void Are_mocks_Same(){
    
        var serviceMock = new Mock<IService>();
        var getMock = container.GetMock<IService>();             
        Assert.AreSame(getMock, serviceMock);
    }
    
    private UnityAutoMoqContainer容器;
    [设置]
    公共作废设置()
    {
    容器=新的UnityAutoMoqContainer();
    }
    [测试]
    公共空间是相同的吗{
    var serviceMock=new Mock();
    var getMock=container.getMock();
    areseme(getMock,serviceMock);
    }
    
  • 错误1测试 'UnityAutoMoq.Tests.UnityAutoMoqContainerFixture.Mock是否相同' 失败:应为:与处相同 UnityAutoMoq.Tests.UnityAutoMoqContainerFixture.UnityAutoMoq中的模拟是否相同() C:\用户

    那么,为什么当“预期”和“但是是”相同时,它仍然抛出异常呢

    我看到的区别是GetMock使用Unity来解析I,e resolve()依赖项,而新的Mock没有。但我无法解释我自己为什么会有这种例外

    private UnityAutoMoqContainer container;
    
    [SetUp]
    public void SetUp()
    {
        container = new UnityAutoMoqContainer();
    }
    
    [Test]
    public void Are_mocks_Same(){
    
        var serviceMock = new Mock<IService>();
        var getMock = container.GetMock<IService>();             
        Assert.AreSame(getMock, serviceMock);
    }
    
  • 解析抽象类型:

    我使用Moq.Mock解析一个抽象类型,如下所示

        var httpContextBaseMock = new Mock<HttpContextBase>();
    
    var httpContextBaseMock=new Mock();
    
  • 但是,以下对UnityAutoMoqContainer的调用引发异常:

            var mock = container.GetMock<HttpContextBase>();
    
    var mock=container.GetMock();
    
    依赖项解析失败,类型为= “System.Web.HttpContextBase”,name=“(无)”。发生异常 while:解析时。异常为:InvalidOperationException-异常 无法构造类型HttpContextBase。您必须配置 容器来提供此值


    问题是为什么容器不方便返回模拟的抽象类型?

    AreName方法测试两个参数是否引用了相同的对象。当你这样做的时候

    var serviceMock = new Mock<IService>();
    var getMock = container.GetMock<IService>();
    Assert.AreSame(getMock, serviceMock);
    
    var serviceMock=new Mock();
    var getMock=container.getMock();
    areseme(getMock,serviceMock);
    
    创建两个不同的对象,它们将永远不会是相同的引用。如果不使用容器,automock容器无法了解您创建的实例。然而,这将成功:

    var mock1 = container.GetMock<IService>();
    var mock2 = container.GetMock<IService>();
    Assert.AreSame(mock1, mock2);
    
    var mock1=container.GetMock();
    var mock2=container.GetMock();
    Assert.arame(mock1、mock2);
    
    无法从抽象类型创建模拟是一个错误,但现在应该修复。如果您更新到v2.1.0,它将有望按预期工作

    希望这有帮助

    -托马斯