如何在container中测试期望。用参数解析

时间:2013-11-23 12:56:40

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

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

这是我的功能:

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();

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

1 个答案:

答案 0 :(得分:0)

我想你所指的是&#34;构造函数参数&#34;是容器。并且您希望通过参数验证.Resolve的期望。

你不能&#34;验证&#34;一个expectation on a static extension member,一个IUnityContainer,如Resolve。

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

您可以通过其他方式执行此操作,例如您可以将其抽象为虚拟方法,以便指定期望值。