Dependency injection 在开发中测试web应用程序时模拟外部web服务的最佳方法
目前我正在开发一个依赖于大量外部web服务的应用程序。其中一些是authorize.net和chargifi 在测试(手动测试)除与这些web服务集成之外的其他内容时,我会将这些web服务依赖项替换为它们的伪版本,而这些版本实际上没有任何作用。我目前的做法是在structure map registry类中使用以下代码行:Dependency injection 在开发中测试web应用程序时模拟外部web服务的最佳方法,dependency-injection,structuremap,integration-testing,Dependency Injection,Structuremap,Integration Testing,目前我正在开发一个依赖于大量外部web服务的应用程序。其中一些是authorize.net和chargifi 在测试(手动测试)除与这些web服务集成之外的其他内容时,我会将这些web服务依赖项替换为它们的伪版本,而这些版本实际上没有任何作用。我目前的做法是在structure map registry类中使用以下代码行: For<IChargifyService>().Use<MockChargifyService>(); //uncomment this li
For<IChargifyService>().Use<MockChargifyService>(); //uncomment this line to use a mock chargify service
For().Use()//取消对此行的注释以使用模拟chargify服务
我在注册表中有类似的行,用于其他假冒服务。我在部署时将它们注释掉,以便在生产中使用真正的服务。真实和虚假的服务实现都存在于基础架构
程序集中
这种方法的问题是,我必须记住在部署之前取消对行的注释。我知道有一种方法可以使用结构Xml配置来实现这一点,但我想知道是否有更好的方法来实现这一点。创建
模拟基础架构程序集是个好主意吗?看看()。我可以想到以下几种方法:
1) 您可以按照建议创建一个单独的程序集,其中包含所有模拟实现。您还将在该程序集中包含一个注册表,该注册表将模拟实现设置为默认值。主程序集中的注册表必须进行扫描,以便有选择地加载模拟程序集-类似于:
Scan(x =>
{
x.TheCallingAssembly();
x.AssembliesFromApplicationBaseDirectory();
x.LookForRegistries();
});
2) 另一个选项是为模拟创建配置文件:
Profile("Test", x =>
{
x.For<IChargifyService>().Use<MockChargifyService>();
// etc.
});
基于某些环境条件,表明您处于测试模式。谢谢:)我正在考虑使用配置文件选项,它看起来是最灵活的选项。
ObjectFactory.Profile = "Test";