функция
fun doTest(..., doAssert: ExecutionResult.() -> Unit)
было очень удобно вызывать её и вторым параметром передавать функцию, в которой подряд шли вызовы extension функций на ExecutionResult e, вот так:
fun ExecutionResult.assertString(...) = ...
doTest(...) { // this: ExecutionResult
assertString("This is test!")
}
но потом оказалось, что эти самые ассерты должны лежать не в базовом классе теста, а быть методами класса TestFixture:
class TestFixture {
fun ExecutionResult.assertString(...) = ...
}
Но при этом хочется так же компактно вызывать их из лямбды в doTest
можно сделать так:
fun doTest(..., doAssert: TestFixture.(ExecutionResult) -> Unit)
и вызывать её
doTest(...) { result: ExecutionResult -> // this: TestFixture
result.assertString("This is test!")
}
но это как-то не очень.
Не могу придумать есть ли возможность иметь два разных this в лямбде? (ну или как-то иначе эмулировать возможность вызывать функции с ExecutionResult как this ?
Наверно можно только через 2 ф-ии fun withFixture(block: TestFixture.() -> Unit fun TextFixture.doTest(block: ExecutionResult.() -> Unit) //Use site withFixture { doTest { assert(...) } } Или ждать мультиресиверов :)
можно да, спасибо но как-то не оч всё равно
Иначе думаю никак, можете пинговать человека сверху, чтобы быстрее делали мультиресиверы)
Обсуждают сегодня