创建Mock <istringlocalizer <mycontrollername >>进行单元测试

时间:2018-08-23 00:05:43

标签: c# .net unit-testing .net-core asp.net-core-localization

1)我有一个方法RetrieveAndTranslate(int id, IStringLocalizer _localizer),它从微服务中检索数据并调用本地化方法Localize(List<MyObjects> myObjects, IStringLocalizer<MyControllerClass> _localizer)

2) RetrieveAndTranslate(int id, IStringLocalizer _localizer)是通过Controller中称为GetRecords()的方法调用的,其中IStringLocalizer在全局范围内创建。 IStringLocalizer负责解析查询字符串并从中提取区域设置信息。而且,一旦它被称为_localizer["myValueToTranslate"],它就会根据从查询字符串获得的语言环境值在存储在语言环境文件夹中的语言环境文件中查找该键。

目的::我试图通过创建具有不同语言环境属性的IStringLocalizer的模拟来创建单元测试,但是无法伪造语言环境。我尝试过这样的事情:

IStringLocalizer<MyControllerClass> _localizer;
_localizer.WithCulture(new CultureInfo("fr-FR")); 

结果:因此,它创建了一个具有“ fr-FR”语言环境的新IStringLocalizer,但是我需要具有“ fr-FR”语言环境的IStringLocalizer<MyControllerClass>

问题:是否可以创建IStringLocalizer并手动设置将用于测试查找的语言环境属性?

编辑:

调用Localize();

的方法
  public List<MyObject> GetPushNotificationSettingsAsync(string usid, IStringLocalizer<NotificationSettingsController> localizer)
    {    
       var uiPushNotificationSettings = GetData(usid)

       var result = Localize(uiPushNotificationSettings, localizer);
       return result;
    }

控制器方法:

public class MyController: Controller{

     private readonly IStringLocalizer<NotificationSettingsController> _localizer;

     public MyController(IStringLocalizer localizer){
          _localizer = localizer;
     }

     public Task<IActionResult> ControllerMethod(){
          var result = GetPushNotificationSettingsAsync(2,localizer);
          return (result);
      }
}

我需要为GetPushNotificationsSettingsAsync()创建单元测试;

0 个答案:

没有答案