获取我的测试类的名称空间

本文关键字:空间 我的 测试类 获取 | 更新日期: 2023-09-27 18:11:56

我有一个webdriver解决方案,其中有10个左右的项目。包含所有常用方法的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 . marketplace .dll程序集中提取类型。

获取我的测试类的名称空间

我能算出来。我遇到的问题是调用程序集不是正确的程序集,因为我调用了核心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());

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