【问题标题】:How to do test expectations in container.Resolve with arguments如何在容器中测试预期。用参数解决
【发布时间】:2013-11-23 12:56:40
【问题描述】:

我有一个关于如何为具有参数覆盖的统一容器解析调用创建测试期望的问题。

这是我的功能:

protected override Response DecodeResponse(byte[] data)
{
    Response response = base.container.Resolve<MyClass>(new ParameterOverrides
    {
        { "Code", GCommandCode.ClearAlarm }, 
        { "Error", 0 } 
    });

    return response;
}

这是我的单元测试:

// Arrange
IUnityContainer container = MockRepository.GenerateStub<IUnityContainer>();

container.Expect(c => c.RegisterType<MyClass>()).Repeat.Once(); 
container.Expect(c => c.Resolve<MyClass>()).Repeat.Once().Return(preparedResponse);

Mock mock = new Mock(container);

// Act
Response response = mock.DecodeResponse(new byte[] {});

// Assert
container.VerifyAllExpectations();

我想创建一个测试期望来测试构造函数参数,因为在实际测试中,无论使用哪个参数,期望都会通过,并且解析调用返回一个空值。

【问题讨论】:

    标签: c# unit-testing dependency-injection unity-container


    【解决方案1】:

    我猜你所说的“构造函数参数”是容器。并且您想用参数验证 .Resolve 的期望。

    您不能“验证”一个 expectation on a static extension member,一个 IUnityContainer,例如 Resolve。

     public static T Resolve<T>(this IUnityContainer container, 
                                params ResolverOverride[] overrides);
    

    还有其他方法可以做到这一点,例如可以将其抽象为虚拟方法,以便指定期望。

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 2020-12-10
      • 2019-11-25
      • 2018-08-03
      • 2021-10-02
      • 2015-09-14
      相关资源
      最近更新 更多