【问题标题】:Is it possible to apply a configuration transformation for an AppHarbor test project?是否可以为 AppHarbor 测试项目应用配置转换?
【发布时间】:2012-07-06 13:36:10
【问题描述】:

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

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

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

有人知道这是否可行吗?

【问题讨论】:

标签: .net appharbor


【解决方案1】:

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

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

更新

由于这是为了运行测试,我推荐一种不同的方法:将它们作为依赖项注入。请参阅 Configuration Settings Are A Dependency That Should Be Injected 以获取有关此主题的出色帖子。

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

那么,为什么将配置设置添加到您的单元测试项目是一种黑客行为? 好吧,web.config 和 app.config 和其他文件一样。所以 在类中引用配置设置意味着 类直接依赖于文件系统。你不会有这种感觉 如果您的单元测试在 My 文档,或者从网上下载了一个网页,为什么要这样做 人们认为访问 web.config 是可以接受的吗?

【讨论】:

  • 在测试构建阶段我没有运行 Web 项目或后台工作应用程序; AppHarbor 构建系统正在运行测试(使用测试运行器),它使用在测试项目(它是一个 DLL)中找到的配置文件。或者至少,这就是它在本地工作的方式,无论是从 MsBuild CLI 还是在 Visual Studio 下。
  • 现在我明白了。我尝试使用 CI 服务器沿着这条路走下去,最后我用 DI 框架注入了我的设置。
  • 另请注意,我们目前仅在部署前应用发布转换,而不是测试转换。
  • @jrummell 您的 DI 修订版提出了一个很好的观点,所以我对此投了赞成票,但 friism 在他的评论中给出了原始问题的答案。我将更改我的代码以考虑此答案,但还要考虑您建议的 DI 方法。谢谢。
  • @jrummell 我想了更多,我决定也许我问错了问题!因此,您的答案是一个很好的答案,这就是我最终要做的;我现在正在注入我的配置依赖项。这也将帮助其他有同样问题的人。标记为“已回答”——谢谢。
【解决方案2】:

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

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

我在 app.config 中添加了环境应用设置:

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

我注意到,当该代码在 app Harbor 上运行时,环境值是 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 是我想在集成测试时使用的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多