AppHarbor文档中指出,配置转换适用于网站和后台工作者配置文件。但是,我有一个不可执行的,不可部署的集成测试项目,需要对测试环境进行app.config转换。
到目前为止,我对以下文件结构没有任何成功,我猜测AppHarbor在测试执行构建步骤期间不支持DLL项目的配置转换:
Specs.proj
+
+-- Specs.dll.config
+
+-- Specs.dll.Debug.config
+
+-- Specs.dll.Test.config
有人知道这是否可行吗?
答案 0 :(得分:2)
为库项目(dll)转换配置是没有意义的。您的应用程序将使用您的web应用程序的exe或web.config的app.config。
因此,您需要将dll配置中的相关配置设置复制到exe / web配置转换中。
<强>更新强>
由于这是用于运行测试,我建议采用不同的方法:将它们作为依赖项注入。有关此主题的精彩帖子,请参阅Configuration Settings Are A Dependency That Should Be Injected。
这是一个自以为是的摘录改变了我的想法:
那么为什么要将配置设置添加到单元测试项目中呢? 好吧,web.config和app.config就像其他文件一样。所以 在类中引用配置设置意味着那样 class直接依赖于文件系统。你不会这样 舒服(我希望)如果您的单元测试在My中打开了一个文件 文件,或从互联网上下载的网页,为什么呢 人们认为访问web.config是可以接受的吗?
答案 1 :(得分:0)
我想使用app ports配置值进行集成测试。我没有能够让app Harbor注入正确的配置设置,但我已经接近了。
我在我的web项目中添加了一个app.config,因为我的web项目中包含了我的集成测试。
我将环境应用设置添加到app.config:
<appSettings>
<add key="Environment" value="localconfig"/>
我注意到该代码在app harbour上运行时,环境值测试:27017 。
我写了这段代码:
private static string GetMongoDbConnectionString()
{
string con = ConfigurationManager.AppSettings.Get("MONGOHQ_URL") ??
ConfigurationManager.AppSettings.Get("MONGOLAB_URI");
string env = ConfigurationManager.AppSettings.Get("Environment");
if (env.StartsWith("Test", StringComparison.OrdinalIgnoreCase))
{
con = "mongodb://xxxxxxxxx";
}
return con;
}
xxxxxxxxx是我想在集成测试时使用的值。