当类依赖于隐式时,是否有惯用的方法将类转换为对象?

Mystagogue

我是Scala的新手。

我有一系列执行UI测试的测试类,以及一系列包含可重用的辅助方法的类。

示例测试类:

class MyCoolTestClass extends FreeSpec {

    //Note:  This driver needs to be configurable by the test in some way.
    implicit val driver:WebDriver = new ChromeDriver()

    val myCoolPage = new MyCoolPage

    //Tests below rely on myCoolPage methods
}

辅助类示例:

class MyCoolPage(implicit driver:WebDriver) {
    def clickElement1(){
     //relies on driver
    }
    def assertElement2Enabled(){
     //relies on driver
    }
}

现在,所有帮助程序类实际上都不具有可变状态。这使我想将它们从classes转换objects。

但是,我唯一能弄清楚该怎么做的方法是implicit WebDriver在每个方法中添加一个参数。可以,但是很难看。还有其他更简洁的方法可以实现我想要的功能吗?或者,是否有一种更惯用的方法来完全组织此测试类/帮助器方法关系?

tgr

我认为,正如您所要求的,没有惯用的方法classes转换objects。这是我关于原因的观点:

driverMyCoolClass中使用的方法中声明了一个属性因此,您class实际上具有状态。WebDriver国家注入MyCoolPage根据注入的实现,WebDriver处理方法调用的方式可能会有所不同。

为了克服这个问题,您需要WebDriver为自己发现的每个方法赋予as隐式参数。但是,这将允许在运行时从外部替换驱动程序。这将违反Open-Closed-Principle,我认为这比使用您的构造更惯用class

如果以后再次遇到此问题,则可以尝试不使用来编写代码implicit如果看起来仍然是更改class的适当方法object,则可能不错。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

“特殊方法的隐式使用始终依赖于特殊方法的类级绑定”

如何隐式转换为具有同名方法的类

将一个类的对象隐式转换为另一个类

使用LINQ IEnumerable.ToDictionary()时无法将类隐式转换为基类

在pyspark中将RDD转换为DataFrame时,Schema是否依赖于第一行?

域模型类是否应该始终依赖于原语?

依赖于特定类类型的C ++模板方法?

调用带有隐式转换为模板类对象的参数的函数

隐式将整数转换为类'BigInt'

编写具有依赖于继承成员的函数的基类的正确方法

将类方法转换为Ruby中proc的惯用方式

隐式类vs隐式转换为特征

使用依赖于其他类的类将CSS应用于任何元素

在模板化调用中隐式将包装器类转换为超级类

测试依赖于类路径上类的存在的代码

在Startup类中获取依赖于DI的类的实例

是否将基类对象隐式添加到派生类?

为什么operator <<不会隐式将我的定制类对象转换为字符串

具有依赖于Java中未指定类的功能

如何有一个依赖于类的模板参数的成员函数实现?

如何记录依赖于外部包中的类的S4方法?

从Shapeless HList转换为case类时,缺少隐式Generic.Aux

通过匿名类使用线程时隐式转换为可运行接口?

Maven无法编译依赖于rt.jar的类

运行依赖于终端中的Jar文件的类

从 shell 运行依赖于其他类的 java 程序

C ++依赖于派生类的纯虚函数

如何让变量依赖于类中的其他变量?

如何转发声明依赖于变体定义的类,而后者又依赖于模板化类?