如果尝试装饰类,如何使方法与默认实现相同?
例如,我正在尝试将属性添加到WebDriver类的IWebDriver接口。
即
public class MyWebDriver : IWebDriver
{
private IWebDriver _driver;
internal string _currentTest { get; set; }
internal MyWebDriver(IWebDriver driver)
{
_driver = driver;
}
}
Visual Studio IntelliSense让我使用一堆'throw new NotImplementedException();
作为默认WebDriver类方法的方法体来实现类(或接口)。
即
public IWebElement FindElement(By by)
{
throw new NotImplementedException();
}
我的问题是,如果我不想调整这些方法的行为,我该如何实现呢?我只是将它全部留在正文中的那一行,或者我是否必须这样做(如果是这样的话,对于具有返回类型和参数的FindElement方法将如何处理?):
public string CurrentWindowHandle
{
get
{
return _driver.CurrentWindowHandle;
}
}
public ReadOnlyCollection<string> WindowHandles
{
get
{
return _driver.WindowHandles;
}
}
public void Close()
{
_driver.Close();
}
public void Quit()
{
_driver.Quit();
}
我只是想在IWebDriver接口中添加一个字符串变量来跟踪正在运行的测试。
编辑:我找到了一个替代解决方案来解决我的初始问题(正确记录测试结果),这个解决方案不涉及实现任何新功能,而是将try / catches放在正确的位置。此问题的解决方案可以在标记的答案以及下面的@AlexanderWinter中显示实现示例,其中包括全局检索数据的方法。
感谢您的帮助。
答案 0 :(得分:2)
使用外部方法保存数据,而不是扩展类。您可以使用的是System.Runtime.CompilerServices.ConditionalWeakTable<TKey, TValue>
。
您可以通过以下方式使用它:
class TestState
{
public string Name { get; set; }
}
//initialization of some private field
ConditionalWeakTable<IWebDriver, TestState> myTestsByDriver = new ConditionalWeakTable<IWebDriver, TestState>();
...
//usage:
myTestsByDriver.GetOrCreateValue().Name = "My_First_Test";
//etc.
答案 1 :(得分:1)
查看Extension methods以向函数添加功能,而不是在整个类中创建包装器