【问题标题】:Get NameSpace of my Test Class获取我的测试类的命名空间
【发布时间】:2013-05-01 21:53:04
【问题描述】:

我有一个包含 10 个左右项目的 webdriver 解决方案。 1 个包含所有常用方法的核心程序集/dll,以及 9 个在测试中使用这些方法的其他测试程序集。

我需要访问这 9 个程序集之一的嵌入式资源,但我需要从核心 dll 内部进行。最好的方法是什么。

namespace = webdriver.core 
json.cs - reads a json file and returns it as a string

namespace = webdriver.marketplacestest 
marketplace1Test.cs - calls one of the methods in json.cs such as getName();
profile.json - holds {"marketplace1" : "Amazon"}

从已知命名空间调用嵌入式资源很容易。我是这样做的:

private static string fromEmbeddedResource(string myNamespace, string myFolder, string fileName)
{
    string result;
    using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(myNamespace + "." + myFolder + "." + fileName))
    using (StreamReader reader = new StreamReader(stream))
    {
        result = reader.ReadToEnd();
    }

    return result;

}

如您所见,我只是调用以下内容,并将文件作为字符串

string json = fromEmbeddedResource("WebDriver.Core", "CFG", "pid.json");

当文件嵌入到我的一个测试 dll 中时会更难。任何人都知道我如何访问或获取程序集的命名空间?我试过了……

Assembly.GetCallingAssembly().GetTypes();

但它看起来像是从 WebDriver.Core.dll 程序集而不是 WebDriver.Marketplace1.dll 程序集中提取类型。

【问题讨论】:

  • 字符串 testNamespace = Assembly.GetCallingAssembly().GetName().Name;这给了我正确的名字,但我仍然在 using(StreamReader reader...

标签: c# dll webdriver .net-assembly system.reflection


【解决方案1】:

我能够弄清楚。我遇到的问题是调用程序集不是正确的程序集,因为我在核心 dll 中调用了一个方法,该方法在我的核心 dll 中调用了另一个方法。我通过传递组件来使其工作,但这很昂贵。为了提高效率,我修改了我的静态 SettingsRepository 类,该类将两个程序集保存在字典中。这样我就可以传入一串“core”或“test”并拉取程序集,而不必确定我每次是使用正在执行的程序集还是调用程序集。

private static Dictionary<string, object> _assembly = new Dictionary<string,object>();
public static Assembly getAssembly (string type)
{
    return _assembly[type] as Assembly;
}
public static void addAssembly(string myType, Assembly assembly)
{
    bool containsKey = _assembly.ContainsKey(myType);
    if (!containsKey)
    {
        _assembly.Add(myType, assembly);
    }
}

当我开始测试时,我总是先初始化我的驱动程序类,所以我将以下两组添加到该构造函数中。

Settings.addAssembly("core", Assembly.GetExecutingAssembly());
Settings.addAssembly("test", Assembly.GetCallingAssembly());

现在我可以随时调用我想要的任何一个程序集,并知道我要得到哪个程序集。

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 2022-01-05
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    相关资源
    最近更新 更多