2

AppHarbor 文档中指出,配置转换适用于网站和后台工作配置文件。但是,我有一个不可执行、不可部署的集成测试项目,需要对测试环境进行 app.config 转换。

到目前为止,我对以下文件结构没有任何成功,我猜 AppHarbor 在测试执行构建步骤中不支持 DLL 项目的配置转换:

Specs.proj
+
+-- Specs.dll.config
    +
    +-- Specs.dll.Debug.config
    +
    +-- Specs.dll.Test.config

有人知道这是否可能吗?

4

2 回答 2

2

转换库项目 (dll) 的配置是没有意义的。您的应用程序将使用您的 exe 的 app.config 或 Web 应用程序的 web.config。

因此,您需要将相关配置设置从您的 dll 配置复制到您的 exe/web 配置转换。

更新

由于这是用于运行测试,我推荐一种不同的方法:将它们作为依赖项注入。有关此主题的出色文章,请参阅配置设置是应注入的依赖项。

这是一个自以为是的摘录,改变了我的想法:

那么为什么将配置设置添加到您的单元测试项目中是一种黑客行为?好吧,web.config 和 app.config 和其他文件一样。因此,在一个类中引用配置设置意味着该类直接依赖于文件系统。如果您的单元测试在“我的文档”中打开了一个文件,或者从 Internet 下载了一个网页,您不会感到那么舒服(我希望),那么为什么人们认为访问 web.config 是可以接受的呢?

于 2012-07-06T14:43:10.033 回答
0

我想使用 app Harbor 配置值进行集成测试。让应用程序港口注入正确的配置设置,我无法让它工作,但我已经接近了。

我在我的 Web 项目中添加了一个 app.config,因为我的 Web 项目中有我的集成测试。

我将环境应用设置添加到 app.config:

<appSettings>
    <add key="Environment" value="localconfig"/>

我注意到当该代码在应用程序港口上运行时,环境值为Test: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 是我想在集成测试时使用的值。

于 2013-09-14T07:13:37.147 回答