@Test
public void checkOutMethod()
        throws Exception {

    IResolveDependencyStrategy strategy1 = mock(IResolveDependencyStrategy.class);
    IOC.resolve(
            Keys.getOrAdd(IResolveDependencyStrategy.class.getCanonicalName()),
            "GetValue",
            strategy1
    );
    IResolveDependencyStrategy strategy2 = mock(IResolveDependencyStrategy.class);
    IOC.resolve(
            Keys.getOrAdd(IResolveDependencyStrategy.class.getCanonicalName()),
            "Transform",
            strategy2
    );
    when(strategy1.resolve(2, 1)).thenReturn(3);
    when(strategy2.resolve("CONST", 3)).thenReturn("CONST3");
    IObject rule1 = mock(IObject.class);
    IObject rule2 = mock(IObject.class);
    IObject rule3 = mock(IObject.class);
    IObject env = mock(IObject.class);
    IObject message = mock(IObject.class);
    IObject response = mock(IObject.class);
    when(rule1.getValue(new FieldName("name"))).thenReturn("GetValue");
    when(rule1.getValue(new FieldName("args"))).thenReturn(new ArrayList<String>(){{add("local/value"); add("message/intValue");}});
    when(rule2.getValue(new FieldName("name"))).thenReturn("Transform");
    when(rule2.getValue(new FieldName("args"))).thenReturn(new ArrayList<String>(){{add("const/CONST"); add("local/value");}});
    when(rule3.getValue(new FieldName("name"))).thenReturn("wds_target_strategy");
    when(rule3.getValue(new FieldName("args"))).thenReturn(new ArrayList<String>(){{add("local/value"); add("response/intValue");}});
    when(env.getValue(new FieldName("message"))).thenReturn(message);
    when(env.getValue(new FieldName("response"))).thenReturn(response);
    when(message.getValue(new FieldName("intValue"))).thenReturn(1);
    doNothing().when(response).setValue(new FieldName("intValue"), "CONST3");
    IField field = new WDSObjectField(new ArrayList<IObject>(){{add(rule1);add(rule2);add(rule3);}});
    field.out(env, 2);
    verify(response, times(1)).setValue(new FieldName("intValue"), "CONST3");
}