Best Kotest code snippet using io.kotest.property.arbitrary.uuid.Arb.Companion.uuid
GenHelper.kt
Source:GenHelper.kt
1/*2 * Copyright (c) 2020 sparetimedevs and respective authors and developers.3 *4 * Licensed under the Apache License, Version 2.0 (the "License");5 * you may not use this file except in compliance with the License.6 * You may obtain a copy of the License at7 *8 * http://www.apache.org/licenses/LICENSE-2.09 *10 * Unless required by applicable law or agreed to in writing, software11 * distributed under the License is distributed on an "AS IS" BASIS,12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13 * See the License for the specific language governing permissions and14 * limitations under the License.15 */16package com.sparetimedevs.pofpaf.test.generator17import arrow.core.Either18import arrow.core.left19import arrow.core.right20import com.microsoft.azure.functions.HttpMethod21import com.sparetimedevs.pofpaf.test.implementation.general.log.Level22import io.kotest.property.Arb23import io.kotest.property.Exhaustive24import io.kotest.property.arbitrary.bool25import io.kotest.property.arbitrary.byte26import io.kotest.property.arbitrary.choice27import io.kotest.property.arbitrary.create28import io.kotest.property.arbitrary.double29import io.kotest.property.arbitrary.element30import io.kotest.property.arbitrary.file31import io.kotest.property.arbitrary.float32import io.kotest.property.arbitrary.int33import io.kotest.property.arbitrary.localDate34import io.kotest.property.arbitrary.localDateTime35import io.kotest.property.arbitrary.localTime36import io.kotest.property.arbitrary.long37import io.kotest.property.arbitrary.map38import io.kotest.property.arbitrary.next39import io.kotest.property.arbitrary.period40import io.kotest.property.arbitrary.short41import io.kotest.property.arbitrary.string42import io.kotest.property.arbitrary.uuid43import io.kotest.property.exhaustive.exhaustive44import java.net.URI45fun Arb.Companion.suspendFunThatReturnsEitherAnyOrAnyOrThrows(): Arb<suspend () -> Either<Any, Any>> =46 choice(47 suspendFunThatReturnsAnyRight(),48 suspendFunThatReturnsAnyLeft(),49 suspendFunThatThrows()50 )51fun Arb.Companion.suspendFunThatReturnsEitherAnyOrUnitOrThrows(): Arb<suspend () -> Either<Any, Unit>> =52 choice(53 suspendFunThatReturnsUnitRight() as Arb<suspend () -> Either<Any, Unit>>,54 suspendFunThatReturnsAnyLeft() as Arb<suspend () -> Either<Any, Unit>>,55 suspendFunThatThrows() as Arb<suspend () -> Either<Any, Unit>>56 )57fun Arb.Companion.suspendFunThatReturnsUnitRight(): Arb<suspend () -> Either<Any, Unit>> =58 unit().map { suspend { it.right() } }59fun Arb.Companion.suspendFunThatReturnsAnyRight(): Arb<suspend () -> Either<Any, Any>> =60 any().map { suspend { it.right() } }61fun Arb.Companion.suspendFunThatReturnsAnyLeft(): Arb<suspend () -> Either<Any, Any>> =62 any().map { suspend { it.left() } }63fun Arb.Companion.suspendFunThatThrows(): Arb<suspend () -> Either<Any, Any>> =64 throwable().map { suspend { throw it } } as Arb<suspend () -> Either<Any, Any>>65fun Arb.Companion.suspendFunThatThrowsFatalThrowable(): Arb<suspend () -> Either<Any, Any>> =66 fatalThrowable().map { suspend { throw it } } as Arb<suspend () -> Either<Any, Any>>67fun Arb.Companion.throwable(): Arb<Throwable> =68 element(69 Exception(),70 RuntimeException(),71 IllegalArgumentException(),72 IllegalStateException(),73 IndexOutOfBoundsException(),74 UnsupportedOperationException(),75 ArithmeticException(),76 NumberFormatException(),77 NullPointerException(),78 ClassCastException(),79 AssertionError(),80 NoSuchElementException(),81 ConcurrentModificationException()82 )83fun Arb.Companion.fatalThrowable(): Arb<Throwable> =84 element(85 MyVirtualMachineError(),86 ThreadDeath(),87 InterruptedException(),88 LinkageError()89 )90class MyVirtualMachineError : VirtualMachineError()91fun Arb.Companion.any(): Arb<Any> =92 choice(93 string() as Arb<Any>,94 int() as Arb<Any>,95 short() as Arb<Any>,96 long() as Arb<Any>,97 float() as Arb<Any>,98 double() as Arb<Any>,99 bool() as Arb<Any>,100 byte() as Arb<Any>,101 uuid() as Arb<Any>,102 file() as Arb<Any>,103 localDate() as Arb<Any>,104 localTime() as Arb<Any>,105 localDateTime() as Arb<Any>,106 period() as Arb<Any>,107 throwable() as Arb<Any>,108 fatalThrowable() as Arb<Any>,109 mapOfStringAndStringGenerator() as Arb<Any>,110 uri() as Arb<Any>,111 httpMethod() as Arb<Any>,112 unit() as Arb<Any>113 )114fun Arb.Companion.unit(): Arb<Unit> =115 create { Unit }116fun Arb.Companion.mapOfStringAndStringGenerator(): Arb<Map<String, String>> =117 element(118 listOf(119 emptyMap(),120 mapOf(121 string().next() to string().next()122 ),123 mapOf(124 string().next() to string().next(),125 string().next() to string().next()126 ),127 mapOf(128 string().next() to string().next(),129 string().next() to string().next(),130 string().next() to string().next()131 ),132 mapOf(133 string().next() to string().next(),134 string().next() to string().next(),135 string().next() to string().next(),136 string().next() to string().next(),137 string().next() to string().next(),138 string().next() to string().next()139 ),140 mapOf(141 string().next() to string().next(),142 string().next() to string().next(),143 string().next() to string().next(),144 string().next() to string().next(),145 string().next() to string().next(),146 string().next() to string().next(),147 string().next() to string().next(),148 string().next() to string().next(),149 string().next() to string().next(),150 string().next() to string().next(),151 string().next() to string().next(),152 string().next() to string().next()153 ),154 mapOf(155 string().next() to string().next(),156 string().next() to string().next(),157 string().next() to string().next(),158 string().next() to string().next(),159 string().next() to string().next(),160 string().next() to string().next(),161 string().next() to string().next(),162 string().next() to string().next(),163 string().next() to string().next(),164 string().next() to string().next(),165 string().next() to string().next(),166 string().next() to string().next(),167 string().next() to string().next(),168 string().next() to string().next(),169 string().next() to string().next(),170 string().next() to string().next(),171 string().next() to string().next(),172 string().next() to string().next(),173 string().next() to string().next(),174 string().next() to string().next(),175 string().next() to string().next(),176 string().next() to string().next(),177 string().next() to string().next(),178 string().next() to string().next()179 )180 )181 )182fun Arb.Companion.uri(): Arb<URI> =183 element(184 listOf(185 URI.create("https://sparetimedevs.com"),186 URI.create("https://www.sparetimedevs.com"),187 URI.create("https://something.sparetimedevs.com"),188 URI.create("https://something.sparetimedevs.com/another/thing"),189 URI.create("https://something.sparetimedevs.com/another/thing?query=param")190 )191 )192fun Arb.Companion.httpMethod(): Arb<HttpMethod> =193 element(194 listOf(195 HttpMethod.GET,196 HttpMethod.HEAD,197 HttpMethod.POST,198 HttpMethod.PUT,199 HttpMethod.DELETE,200 HttpMethod.CONNECT,201 HttpMethod.OPTIONS,202 HttpMethod.TRACE203 )204 )205fun Exhaustive.Companion.logLevel(): Exhaustive<Level> =206 listOf(207 Level.INFO,208 Level.DEBUG,209 Level.WARN,210 Level.ERROR211 ).exhaustive()212fun Arb.Companion.stringOrNull(): Arb<String?> =213 choice(214 string() as Arb<String?>,215 create { null } as Arb<String?>216 )...
ShulkerBoxTest.kt
Source:ShulkerBoxTest.kt
1package land.vani.mockpaper.block.state2import io.kotest.assertions.throwables.shouldThrow3import io.kotest.assertions.throwables.shouldThrowUnit4import io.kotest.core.spec.style.ShouldSpec5import io.kotest.matchers.nulls.shouldBeNull6import io.kotest.matchers.shouldBe7import io.kotest.matchers.types.shouldBeInstanceOf8import io.kotest.property.Arb9import io.kotest.property.Exhaustive10import io.kotest.property.arbitrary.enum11import io.kotest.property.arbitrary.filter12import io.kotest.property.checkAll13import io.kotest.property.exhaustive.collection14import land.vani.mockpaper.MockPaper15import land.vani.mockpaper.UnimplementedOperationException16import land.vani.mockpaper.block.BlockMock17import land.vani.mockpaper.inventory.ShulkerBoxInventoryMock18import org.bukkit.DyeColor19import org.bukkit.Material20import org.bukkit.loot.LootTables21import java.util.UUID22private val shulkerBoxes = enumValues<Material>()23 .filter { it.name.endsWith("SHULKER_BOX") }24 .filterNot { it.name.startsWith("LEGACY") }25private fun Exhaustive.Companion.shulkerBox(): Exhaustive<Material> = Exhaustive.collection(shulkerBoxes)26private fun Arb.Companion.notShulkerBox(): Arb<Material> = Arb.enum<Material>()27 .filter { it !in shulkerBoxes }28class ShulkerBoxTest : ShouldSpec({29 lateinit var shulkerBox: ShulkerBoxMock30 beforeEach {31 MockPaper.mock()32 shulkerBox = ShulkerBoxMock(Material.SHULKER_BOX)33 }34 afterEach {35 MockPaper.unmock()36 }37 should("material block state") {38 checkAll(Exhaustive.shulkerBox()) { material ->39 val block = BlockMock(material)40 block.state.shouldBeInstanceOf<ShulkerBoxMock>()41 }42 }43 should("not shulker box cannot create instance") {44 checkAll(Arb.notShulkerBox()) { material ->45 shouldThrow<IllegalArgumentException> {46 ShulkerBoxMock(material)47 }48 }49 }50 should("inventory is ShulkerBoxInventoryMock") {51 shulkerBox.inventory.shouldBeInstanceOf<ShulkerBoxInventoryMock>()52 }53 should("getSnapshot") {54 shulkerBox.getSnapshot().shouldBeInstanceOf<ShulkerBoxMock>()55 }56 should("getLootTable is not implemented yet") {57 shouldThrow<UnimplementedOperationException> {58 shulkerBox.lootTable59 }60 }61 should("setLootTable is not implemented yet") {62 shouldThrowUnit<UnimplementedOperationException> {63 shulkerBox.lootTable = LootTables.SPAWN_BONUS_CHEST.lootTable64 }65 }66 should("getSeed is not implemented yet") {67 shouldThrow<UnimplementedOperationException> {68 shulkerBox.seed69 }70 }71 should("sedSeed is not implemented yet") {72 shouldThrowUnit<UnimplementedOperationException> {73 shulkerBox.seed = 1074 }75 }76 should("isRefillEnabled is not implemented yet") {77 shouldThrow<UnimplementedOperationException> {78 shulkerBox.isRefillEnabled79 }80 }81 should("hasBeenFilled is not implemented yet") {82 shouldThrow<UnimplementedOperationException> {83 shulkerBox.hasBeenFilled()84 }85 }86 should("hasPlayerLooted is not implemented yet") {87 shouldThrow<UnimplementedOperationException> {88 shulkerBox.hasPlayerLooted(UUID.randomUUID())89 }90 }91 should("getLastLooted is not implemented yet") {92 shouldThrow<UnimplementedOperationException> {93 shulkerBox.getLastLooted(UUID.randomUUID())94 }95 }96 should("setHasPlayerLooted is not implemented yet") {97 shouldThrow<UnimplementedOperationException> {98 shulkerBox.setHasPlayerLooted(UUID.randomUUID(), true)99 }100 }101 should("hasPendingRefill is not implemented yet") {102 shouldThrow<UnimplementedOperationException> {103 shulkerBox.hasPendingRefill()104 }105 }106 should("getLastFilled is not implemented yet") {107 shouldThrow<UnimplementedOperationException> {108 shulkerBox.lastFilled109 }110 }111 should("getNextRefill is not implemented yet") {112 shouldThrow<UnimplementedOperationException> {113 shulkerBox.nextRefill114 }115 }116 should("setNextRefill is not implemented yet") {117 shouldThrowUnit<UnimplementedOperationException> {118 shulkerBox.nextRefill = 10119 }120 }121 should("open is not implemented yet") {122 shouldThrow<UnimplementedOperationException> {123 shulkerBox.open()124 }125 }126 should("close is not implemented yet") {127 shouldThrow<UnimplementedOperationException> {128 shulkerBox.close()129 }130 }131 should("isOpen is not implemented yet") {132 shouldThrow<UnimplementedOperationException> {133 shulkerBox.isOpen134 }135 }136 context("getColor") {137 should("getColor is default null") {138 shulkerBox.color.shouldBeNull()139 }140 should("getColor with white shulker box is white") {141 shulkerBox = ShulkerBoxMock(Material.WHITE_SHULKER_BOX)142 shulkerBox.color shouldBe DyeColor.WHITE143 }144 }145})...
SongGenerator.kt
Source:SongGenerator.kt
1package rackdon.kosic.utils.generator2import io.kotest.property.Arb3import io.kotest.property.arbitrary.arb4import io.kotest.property.arbitrary.localDateTime5import io.kotest.property.arbitrary.map6import io.kotest.property.arbitrary.positiveInts7import io.kotest.property.arbitrary.single8import io.kotest.property.arbitrary.string9import io.kotest.property.arbitrary.uuid10import rackdon.kosic.controller.dto.SongCreationDto11import rackdon.kosic.model.SongCreation12import rackdon.kosic.model.SongRaw13import rackdon.kosic.utils.generator.GeneratorConstants.MAP_LIMIT14import rackdon.kosic.utils.generator.GeneratorConstants.STRING_LIMIT15import java.time.LocalDateTime16import java.util.UUID17fun Arb.Companion.songCreation(18 name: String? = null,19 albumId: UUID? = null,20 duration: UInt? = null,21 createdOn: LocalDateTime? = null,22 meta: Map<String, Any>? = null23) =24 arb { generateSequence {25 SongCreation(26 name = name ?: Arb.string(1, GeneratorConstants.STRING_LIMIT).single(),27 albumId = albumId ?: Arb.uuid().single(),28 duration = duration ?: Arb.positiveInts().single().toUInt(),29 createdOn = createdOn ?: Arb.localDateTime().single(),30 meta = meta ?: Arb.map(Arb.string(1, STRING_LIMIT), Arb.string(1, STRING_LIMIT), 0, MAP_LIMIT).single())31 } }32fun Arb.Companion.songCreationDto(33 name: String? = null,34 albumId: UUID? = null,35 duration: Int? = null,36 createdOn: LocalDateTime? = null,37 meta: Map<String, Any>? = null38) =39 arb { generateSequence {40 SongCreationDto(41 name = name ?: Arb.string(1, STRING_LIMIT).single(),42 albumId = albumId ?: Arb.uuid().single(),43 duration = duration ?: Arb.positiveInts().single(),44 createdOn = createdOn ?: Arb.localDateTime().single(),45 meta = meta ?: Arb.map(Arb.string(1, STRING_LIMIT), Arb.string(1, STRING_LIMIT), 0, MAP_LIMIT).single())46 } }47fun Arb.Companion.songRaw(48 id: UUID? = null,49 name: String? = null,50 albumId: UUID? = null,51 duration: UInt? = null,52 createdOn: LocalDateTime? = null,53 meta: Map<String, Any>? = null54) =55 arb { generateSequence {56 SongRaw(57 id = id ?: Arb.uuid().single(),58 name = name ?: Arb.string(1, STRING_LIMIT).single(),59 albumId = albumId ?: Arb.uuid().single(),60 duration = duration ?: Arb.positiveInts().single().toUInt(),61 createdOn = createdOn ?: Arb.localDateTime().single(),62 meta = meta ?: Arb.map(Arb.string(1, STRING_LIMIT), Arb.string(1, STRING_LIMIT), 0, MAP_LIMIT).single())63 } }...
GroupGenerator.kt
Source:GroupGenerator.kt
1package rackdon.kosic.utils.generator2import io.kotest.property.Arb3import io.kotest.property.arbitrary.arb4import io.kotest.property.arbitrary.localDateTime5import io.kotest.property.arbitrary.positiveInts6import io.kotest.property.arbitrary.single7import io.kotest.property.arbitrary.string8import io.kotest.property.arbitrary.uuid9import rackdon.kosic.controller.dto.GroupCreationDto10import rackdon.kosic.model.GroupCreation11import rackdon.kosic.model.GroupRaw12import rackdon.kosic.utils.generator.GeneratorConstants.STRING_LIMIT13import java.time.LocalDateTime14import java.util.UUID15fun Arb.Companion.groupCreation(16 name: String? = null,17 members: UInt? = null,18 createdOn: LocalDateTime? = null,19 dissolvedOn: LocalDateTime? = null20) =21 arb { generateSequence {22 GroupCreation(23 name = name ?: Arb.string(1, STRING_LIMIT).single(),24 members = members ?: Arb.positiveInts(32767).single().toUInt(),25 createdOn = createdOn ?: Arb.localDateTime().single(),26 dissolvedOn = dissolvedOn ?: Arb.localDateTime().single().orNull())27 } }28fun Arb.Companion.groupCreationDto(29 name: String? = null,30 members: Int? = null,31 createdOn: LocalDateTime? = null,32 dissolvedOn: LocalDateTime? = null33) =34 arb { generateSequence {35 GroupCreationDto(36 name = name ?: Arb.string(1, STRING_LIMIT).single(),37 members = members ?: Arb.positiveInts(32767).single(),38 createdOn = createdOn ?: Arb.localDateTime().single(),39 dissolvedOn = dissolvedOn ?: Arb.localDateTime().single().orNull())40 } }41fun Arb.Companion.groupRaw(42 id: UUID? = null,43 name: String? = null,44 members: UInt? = null,45 createdOn: LocalDateTime? = null,46 dissolvedOn: LocalDateTime? = null47) =48 arb { generateSequence {49 GroupRaw(50 id = id ?: Arb.uuid().single(),51 name = name ?: Arb.string(1, STRING_LIMIT).single(),52 members = members ?: Arb.positiveInts(32767).single().toUInt(),53 createdOn = createdOn ?: Arb.localDateTime().single(),54 dissolvedOn = dissolvedOn ?: Arb.localDateTime().single().orNull())55 } }...
uuid.kt
Source:uuid.kt
1package io.kotest.property.arbitrary2import io.kotest.property.Arb3import java.util.*4enum class UUIDVersion(5 val uuidRegex: Regex6) {7 ANY("[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}".toRegex(RegexOption.IGNORE_CASE)),8 V1("[0-9a-f]{8}-[0-9a-f]{4}-[1][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}".toRegex(RegexOption.IGNORE_CASE)),9 V2("[0-9a-f]{8}-[0-9a-f]{4}-[2][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}".toRegex(RegexOption.IGNORE_CASE)),10 V3("[0-9a-f]{8}-[0-9a-f]{4}-[3][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}".toRegex(RegexOption.IGNORE_CASE)),11 V4("[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}".toRegex(RegexOption.IGNORE_CASE)),12 V5("[0-9a-f]{8}-[0-9a-f]{4}-[5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}".toRegex(RegexOption.IGNORE_CASE));13}14fun Arb.Companion.uuid(15 uuidVersion: UUIDVersion = UUIDVersion.V4,16 allowNilValue: Boolean = true17): Arb<UUID> {18 val edgeCases = if (allowNilValue)19 listOf(UUID.fromString("00000000-0000-0000-0000-000000000000"))20 else emptyList()21 val arb = when (uuidVersion) {22 UUIDVersion.ANY -> arbUuidAny23 UUIDVersion.V1 -> arbV124 UUIDVersion.V2 -> arbV225 UUIDVersion.V3 -> arbV326 UUIDVersion.V4 -> arbV427 UUIDVersion.V5 -> arbV528 }29 return arbitrary(edgeCases) {30 val value = arb.next(it)31 UUID.fromString(value)32 }33}34// UUID regex patterns are predictable.35// The reason we put these Arbs here is so that RgxGen instances can be reused for better performance36private val arbUuidAny = Arb.stringPattern(UUIDVersion.ANY.uuidRegex.pattern)37private val arbV1 = Arb.stringPattern(UUIDVersion.V1.uuidRegex.pattern)38private val arbV2 = Arb.stringPattern(UUIDVersion.V2.uuidRegex.pattern)39private val arbV3 = Arb.stringPattern(UUIDVersion.V3.uuidRegex.pattern)40private val arbV4 = Arb.stringPattern(UUIDVersion.V4.uuidRegex.pattern)41private val arbV5 = Arb.stringPattern(UUIDVersion.V5.uuidRegex.pattern)...
AlbumGenerator.kt
Source:AlbumGenerator.kt
1package rackdon.kosic.utils.generator2import io.kotest.property.Arb3import io.kotest.property.arbitrary.arb4import io.kotest.property.arbitrary.localDateTime5import io.kotest.property.arbitrary.single6import io.kotest.property.arbitrary.string7import io.kotest.property.arbitrary.uuid8import rackdon.kosic.controller.dto.AlbumCreationDto9import rackdon.kosic.model.AlbumCreation10import rackdon.kosic.model.AlbumRaw11import java.time.LocalDateTime12import java.util.UUID13fun Arb.Companion.albumCreation(14 name: String? = null,15 groupId: UUID? = null,16 createdOn: LocalDateTime? = null17) =18 arb { generateSequence {19 AlbumCreation(20 name = name ?: Arb.string(1, GeneratorConstants.STRING_LIMIT).single(),21 groupId = groupId ?: Arb.uuid().single(),22 createdOn = createdOn ?: Arb.localDateTime().single())23 } }24fun Arb.Companion.albumCreationDto(25 name: String? = null,26 groupId: UUID? = null,27 createdOn: LocalDateTime? = null28) =29 arb { generateSequence {30 AlbumCreationDto(31 name = name ?: Arb.string(1, GeneratorConstants.STRING_LIMIT).single(),32 groupId = groupId ?: Arb.uuid().single(),33 createdOn = createdOn ?: Arb.localDateTime().single())34 } }35fun Arb.Companion.albumRaw(36 id: UUID? = null,37 name: String? = null,38 groupId: UUID? = null,39 createdOn: LocalDateTime? = null40) =41 arb { generateSequence {42 AlbumRaw(43 id = id ?: Arb.uuid().single(),44 name = name ?: Arb.string(1, GeneratorConstants.STRING_LIMIT).single(),45 groupId = groupId ?: Arb.uuid().single(),46 createdOn = createdOn ?: Arb.localDateTime().single())47 } }...
Arb.Companion.uuid
Using AI Code Generation
1 fun testUUID() {2 Arb.uuid().checkAll { uuid ->3 }4 }5 fun testUUID() {6 Arb.uuid().checkAll { uuid ->7 }8 }9 fun testUUID() {10 Arb.uuid().checkAll { uuid ->11 }12 }13 fun testUUID() {14 Arb.uuid().checkAll { uuid ->15 }16 }17 fun testUUID() {18 Arb.uuid().checkAll { uuid ->19 }20 }21 fun testUUID() {22 Arb.uuid().checkAll { uuid ->23 }24 }25 fun testUUID() {26 Arb.uuid().checkAll { uuid ->27 }28 }29 fun testUUID() {30 Arb.uuid().checkAll { uuid ->31 }32 }33 fun testUUID() {34 Arb.uuid().checkAll { uuid ->35 }36 }37 fun testUUID() {38 Arb.uuid().checkAll { uuid ->39 }40 }41 fun testUUID() {42 Arb.uuid().checkAll { uuid ->43 }44 }
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!