C#中的MOQ递归方法 [英] MOQ recursion method in C#

查看:112
本文介绍了C#中的MOQ递归方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



我有一个问题,我怎么能在我的mockrespository中的同一个方法中调用一个方法。在MOQ上设置。下面是我的实际代码,我需要在'ChangeFilterAttribute'的同一方法中调用我的方法'ChangeFilterAttribute。



或者任何人都可以给我asample方案调用方法在moq单元测试中使用相同的方法名称。



提前感谢您的帮助。



我尝试了什么:



  private   void  GetFilters_Initialize()
{
_mockRepository.Setup(p = > p.ChangeFilterAttribute(It.IsAny< IList< IFilterDescriptor>>(),It.IsAny< Dictionary< string,Dictionary< string,Dictionary< string,int>>>>()))
.Returns((IList< IFilterDescriptor> filters,Dictionary< string,Dictionary< string,Dictionary< string,int>>> dictionaryColumnValue)= >
{

if (filters.Any())
{
foreach var 过滤器 过滤器)
{
var descriptor = filter as FilterDescriptor;
foreach var item in dictionaryColumnValue)
{
if (描述符!= null && item.Key == descriptor.Member)
{
foreach var memVal in item.Value)
{
descriptor.Member = memVal.Key.ToString();
foreach var conVal in memVal.Value)
{
if (descriptor.ConvertedValue.Equals(conVal.Key))
{
descriptor.Value = conVal.Value;
descriptor.Operator = FilterOperator.IsEqualTo;
break ;
}
else
descriptor.Operator = FilterOperator.Contains;
}
}
}
其他 如果( filter CompositeFilterDescriptor)
{
var compositeFilterDescriptor = filter as CompositeFilterDescriptor;
if (compositeFilterDescriptor!= null
{
// 这是我的问题,如何在我的单元测试中调用此changefilterAtribute方法
ChangeFilterAttribute(compositeFilterDescriptor.FilterDescriptors,_changeFilterAttribute_DictonaryColumnValues);

}
}
}
}
}
返回过滤器;


});
}

解决方案

我认为你必须编写一个包含调用ChangeFilterAttribute的递归方法。

解决了!



 私人 < span class =code-keyword> void  GetFilters_Initialize()
{
var myFilters = new Object ();
_mockRepository.Setup(p = > p.ChangeFilterAttribute(It.IsAny< IList< IFilterDescriptor>>(),It.IsAny< Dictionary< string ,Dictionary< string,Dictionary< string,int>>>>()))

.Callback((IList< IFilterDescriptor> filters,Dictionary< string,Dictionary< string,Dictionary< string ,int>>> dictionaryColumnValue)= >
{
foreach var 过滤器过滤器中)
if (filter CompositeFilterDescriptor)
{
var compositeFilterDescriptor = filter < span class =code-keyword> as CompositeFilterDescriptor;
if (compositeFilterDescriptor!= null
{
myFilters = compositeFilterDescriptor.FilterDescriptors;
return ;

}
}
else
{
myFilters = filters;
return ;
}

})
.Returns((IList< IFilterDescriptor>过滤器,Dictionary< string,Dictionary< string,Dictionary< string,int>>> dictionaryColumnValue)= >
{

filters = myFilters as IList< IFilterDescriptor> ;;
if (filters.Any())
{
foreach var 过滤器过滤器中)
{
var descriptor = filter as FilterDescriptor;
foreach var item in dictionaryColumnValue)
{
if (描述符!= null && item.Key == descriptor.Member)
{
foreach var memberValue in item.Value)
{
descriptor.Member = memberValue.Key.ToString();
foreach var convertedValue in memberValue.Value)
{
if (descriptor.ConvertedValue.Equals(convertedValue.Key))
{
descriptor.Value = convertedValue.Value;
break ;
}
}
}
}
}
}
}
返回过滤器;

});

}


Hi to all,

I have to a question on how could I call a method within the same method inside my mockrespository.setup on MOQ. Below is my actual code where I need to call my method 'ChangeFilterAttribute inside the same method of 'ChangeFilterAttribute'.

Or any one can give me asample scenario that calling method inside the same method name in moq unit testing.

Thank you in advance for your kind help.

What I have tried:

private void GetFilters_Initialize()
       {
           _mockRepository.Setup(p => p.ChangeFilterAttribute(It.IsAny<IList<IFilterDescriptor>>(), It.IsAny<Dictionary<string, Dictionary<string, Dictionary<string, int>>>>()))
                           .Returns((IList<IFilterDescriptor> filters, Dictionary<string, Dictionary<string, Dictionary<string, int>>> dictionaryColumnValue) =>
           {

               if (filters.Any())
               {
                   foreach (var filter in filters)
                   {
                       var descriptor = filter as FilterDescriptor;
                       foreach (var item in dictionaryColumnValue)
                       {
                           if (descriptor != null && item.Key == descriptor.Member)
                           {
                               foreach (var memVal in item.Value)
                               {
                                   descriptor.Member = memVal.Key.ToString();
                                   foreach (var conVal in memVal.Value)
                                   {
                                       if (descriptor.ConvertedValue.Equals(conVal.Key))
                                       {
                                           descriptor.Value = conVal.Value;
                                           descriptor.Operator = FilterOperator.IsEqualTo;
                                           break;
                                       }
                                       else
                                           descriptor.Operator = FilterOperator.Contains;
                                   }
                               }
                           }
                           else if (filter is CompositeFilterDescriptor)
                           {
                               var compositeFilterDescriptor = filter as CompositeFilterDescriptor;
                               if (compositeFilterDescriptor != null)
                               {
                                 // This is my problem, on how could I call this inside of this changefilterAtribute method in my unit testing
                                 ChangeFilterAttribute(compositeFilterDescriptor.FilterDescriptors, _changeFilterAttribute_DictonaryColumnValues);

                               }
                           }
                       }
                   }
               }
               return filters;


           });
       }

解决方案

I would think you would have to write a recursive method that wraps the call to ChangeFilterAttribute.


Solved!

private void GetFilters_Initialize()
      {
          var myFilters = new Object();
          _mockRepository.Setup(p => p.ChangeFilterAttribute(It.IsAny<IList<IFilterDescriptor>>(), It.IsAny<Dictionary<string, Dictionary<string, Dictionary<string, int>>>>()))

          .Callback((IList<IFilterDescriptor> filters, Dictionary<string, Dictionary<string, Dictionary<string, int>>> dictionaryColumnValue) =>
              {
                  foreach (var filter in filters)
                      if (filter is CompositeFilterDescriptor)
                      {
                          var compositeFilterDescriptor = filter as CompositeFilterDescriptor;
                          if (compositeFilterDescriptor != null)
                          {
                              myFilters = compositeFilterDescriptor.FilterDescriptors;
                              return ;

                          }
                      }
                      else
                      {
                          myFilters = filters;
                          return;
                      }

              })
               .Returns((IList<IFilterDescriptor> filters, Dictionary<string, Dictionary<string, Dictionary<string, int>>> dictionaryColumnValue) =>
                          {

                              filters = myFilters as IList<IFilterDescriptor>;
                              if (filters.Any())
                              {
                                  foreach (var filter in filters)
                                  {
                                      var descriptor = filter as FilterDescriptor;
                                      foreach (var item in dictionaryColumnValue)
                                      {
                                          if (descriptor != null && item.Key == descriptor.Member)
                                          {
                                              foreach (var memberValue in item.Value)
                                              {
                                                  descriptor.Member = memberValue.Key.ToString();
                                                  foreach (var convertedValue in memberValue.Value)
                                                  {
                                                      if (descriptor.ConvertedValue.Equals(convertedValue.Key))
                                                      {
                                                          descriptor.Value = convertedValue.Value;
                                                          break;
                                                      }
                                                  }
                                              }
                                          }
                                      }
                                  }
                              }
                              return filters;

                          });

      }


这篇关于C#中的MOQ递归方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆