Теперь ни один из вспомогательных классов на самом деле не имеет изменяемого состояния. Это заставляет меня хотеть конвертировать их из class
es в object
s.
Но у них есть состояние. Да, он неизменный, но так же, как и состояние большинства классов дел, Option
s, List
s ... Ни один из них не должен быть преобразован в object
s. Я не думаю, что есть решение, которое действительно лучше, чем то, с которого вы начали.
Однако есть вариант: вложение вспомогательных объектов в суперкласс:
abstract class AbstractTestClass extends FreeSpec {
// may optionally be implicit or non-abstract
val driver: WebDriver
object MyCoolPage {
def clickElement1(){
//relies on driver
}
def assertElement2Enabled(){
//relies on driver
}
}
object MyCoolPage2 ...
}
class MyCoolTestClass extends AbstractTestClass {
override val driver: WebDriver = new ChromeDriver()
// can use MyCoolPage methods
}
Обратите внимание, что object
s загружаются лениво, поэтому, если MyCoolTestClass
не использует MyCoolPage2
, оно не будет платить за это. Компромисс заключается в том, что все вспомогательные классы должны быть определены в одном файле.