下午好!我有一个 asp.net mvc 应用程序。在其中,我试图“明智地”创建一个架构——使用依赖注入、测试等。该应用程序具有包含业务逻辑的服务类。我需要用测试覆盖这些服务。许多服务使用设置类,其实例在构造函数中传递给它们。例如:
public class AppSettings
{
public AppSettings()
{
SomeStr = WebConfigurationManager.AppSettings["str"]).ToString();
// и еще несколько подобных строк
}
public string SomeStr { get;set; }
}
public class MyService
{
public MyService(AppSettings settings)
{
_settings = settings;
}
private readonly AppSettings _settings;
}
问题就在这里。在类构造函数AppSettings中,初始化了一些变量,这些变量的数据是从web.config文件中获取的。在应用程序本身的代码中,这是可行的,但是如果我尝试MyService在单独的测试应用程序中测试该类,则会出现问题:该类需要传递一个实例AppSettings,但是在创建它时,由于以下原因发生异常无法访问web.config。另外,我不直接自己创建类,DI 库会这样做。在这种情况下如何以及如何正常测试MyService?此外,在我看来,问题在于类构造函数AppSettings中有一个对 web.config 的调用。请告诉我如何解决这个问题?先感谢您。
如果您将该类
AppSettings用作设置类IoC-контейнер,请描述接口IAppSettings并使用Mock对象进行测试。我给你举个例子。在类
MyService中,您将构造函数参数的类型替换settings为IAppSetting。在IoC-контейнере您注册实施。假设您正在使用Ninject,那么kernel.Bind<IAppSetting>().To<AppSetting>()。然后在测试方法中你可以设置你的对象。此处您指定查询
Field1应返回值value1。注意字段
Field1必须在接口中定义IAppSetting显示了一个示例
Ninject