0

我正在尝试在一些自动化测试中使用浏览器特定的 resx 文件。我被困在我希望实例化类型的地方。谁能指出我正确的方向?我已经尝试了 activator.createInstance 等......没有运气。

 public class WebAiiBaseTest : BaseTest
{
    private readonly IDictionary<BrowserType, Type> resxMapper = new Dictionary<BrowserType, Type>{
                                                                {BrowserType.Chrome, typeof(Chrome)}
                                                                , {BrowserType.Safari, typeof(Safari)}
                                                                , {BrowserType.FireFox, typeof(Firefox)}
                                                                , {BrowserType.InternetExplorer, typeof(InternetExplorer)}
                                                            };



    [TestFixtureSetUp]
    public void FixtureSetup()
    {
        Initialize();
        Launcher.LaunchRepairInformation();

    }

    [TearDown]
    public void TestCleanUp()
    {
        Launcher.NavigateToRepairInformation();
    }

    [TestFixtureTearDown]
    public void FixtureCleanup()
    {
        CleanUp();
    }

    protected object BrowserResx
    {
        get { return Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }

    } 


}

此代码返回一个实例,但它是对象类型。我想返回一个强类型实例。我已经尝试过 CreateInstance 的通用重载,就像这样

return Activator.CreateInstance<resxMapper[ActiveBrowser.BrowserType]>(); 

但 Visual Studio 不喜欢这种语法。我在这里做错了什么?感谢您提供任何提示或建议。

干杯,
~ck 在圣地亚哥

4

2 回答 2

0

我仍然没有完全了解您想要做什么,但这是我能想到的唯一事情,我不确定评论线程是否变得更加清晰。

public interface IBrowser
{
}
public class Chrome: IBrowser
{
}
... 

protected IBrowser BrowserResx
{
    get { return (IBrowser)Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }

} 

或者:

protected T BrowserResx<T> where T: IBrowser
{
        get { return (T)Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }
}

..如果您的课程被设计为泛型。如果浏览器类型或接口没有基类,则无法返回更强类型的内容:它们只共享“对象”。

于 2011-03-01T20:15:51.590 回答
0

你的代码拼写不正确,你试过了吗

return Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]);?

于 2011-03-01T19:48:16.930 回答