【问题标题】:File location using assembly:// resource使用 assembly:// 资源的文件位置
【发布时间】:2014-01-28 13:36:49
【问题描述】:

找不到我的 NUnit 类的 Spring.Net 上下文文件。我的问题是我应该将 Spring.Net 上下文文件放在哪里,以便 NUnit 测试可以找到它?我正在使用 Spring.Net 1.3.2(即 NuGet 默认的版本)和 Spring.Net 与 NUnit 的集成。单元测试未找到通过 AbstractDependencyInjectionSpringContextTests 指定的上下文文件。

这是我的第一个 .Net 项目项目,所以我可能缺少一些基本的东西。在我的解决方案中,我的主要 C# 项目将具有 MyAssembly 的程序集/项目名称。然后我在同一个解决方案中创建了一个名为 MyAssemply.Test 的测试项目。最初,我在项目的根目录中创建了我的单元测试类及其上下文文件。上下文文件被标记为嵌入式资源并且请勿复制。资源 URI 是“assembly://MyAssembly.Test/MyNamespace/EmailManagerTestContext.xml”。我不断得到一个空指针。

所以我尝试使用 AssemblyResource 类而不扩展 Spring.Net AbstractDependencyInjectionSpringContextTests 类。这也出现了空值,并没有告诉我它期望文件在哪里。我还使用了Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),发现项目正在另一个驱动器的临时目录中构建。我尝试将类和上下文 XML 文件移动到与命名空间同名的文件夹中,但这不起作用。我见过一些示例,其中目录结构与名称空间与 Java 包不同,所以我有点困惑。感谢您的帮助。

【问题讨论】:

  • 很难说你的实际问题是什么。一件事:临时位置可能是 NUnit 设置“影子复制”测试程序集的结果。另外:我不确定嵌入式资源的事情。也许这有帮助:stackoverflow.com/questions/3314140/…
  • 你能添加你的配置文件吗?

标签: xml configuration nunit config spring.net


【解决方案1】:

要使用 Spring.Net 设置 Nunit,您需要:

  1. 设置您的开发环境:安装 Nunit 测试适配器。

  2. 设置您的项目:添加一个 nunit 引用和 Spring.Net Nunit 引用。

  3. 您的测试必须派生自 AbstractDependencyInjectionSpringContextTests 类。

  4. 使用嵌入式资源路径实现 ConfigLocations 属性。确保此路径是配置失败的最常见错误因素。

`

string resourcePath = string.Format( "assembly://{0}/{1}/{2}.xml"
, currentType.Assembly.GetName().Name
, currentType.Namespace
, currentType.Name);

`

  1. 在构造函数类中,您可以选择自动连接并设置 AutowireMode 属性。

this.AutowireMode = Spring.Objects.Factory.Config.AutoWiringMode.ByName;this.DependencyCheck = true;

`

namespace Spring.Objects.Factory.Config
{
    // Summary:
    //     The various autowiring modes.
    [Serializable]
    public enum AutoWiringMode
    {
        // Summary:
        //     Do not autowire.
        No = 0,
        //
        // Summary:
        //     Autowire by name.
        ByName = 1,
        //
        // Summary:
        //     Autowire by System.Type.
        ByType = 2,
        //
        // Summary:
        //     Autowiring by constructor.
        Constructor = 3,
        //
        // Summary:
        //     The autowiring strategy is to be determined by introspection of the object's
        //     System.Type.
        AutoDetect = 4,
    }
}

`

  1. 我正在使用 ByName。它表示 Spring.Net XML 上定义的对象的名称必须与我的属性名称完全匹配。为了使配置更容易,请使用 alias 在您的测试中重用您的原生配置。

最好的问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-04
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多