আপনার ইউনিট পরীক্ষা ক্লাসে সাধারণত পরীক্ষা পদ্ধতির একটি গোষ্ঠীর জন্য ভাগ করা সংস্থান পরিচালনার জন্য কয়েকটি জিনিস প্রয়োজন। আর Kotlin মধ্যে আপনি ব্যবহার করতে পারেন @BeforeClass
এবং @AfterClass
না পরীক্ষা ক্লাসে, বরং তার মধ্যে সহচর বস্তুর সঙ্গে বরাবর @JvmStatic
টীকা ।
একটি পরীক্ষার শ্রেণীর কাঠামোটি দেখতে এরকম হবে:
class MyTestClass {
companion object {
init {
}
val someClassVar = initializer()
lateinit var someClassLateVar: SomeResource
@BeforeClass @JvmStatic fun setup() {
}
@AfterClass @JvmStatic fun teardown() {
}
}
val someInstanceVar = initializer()
var lateinit someInstanceLateZVar: MyType
@Before fun prepareTest() {
}
@After fun cleanupTest() {
}
@Test fun testSomething() {
}
@Test fun testSomethingElse() {
}
}
উপরেরটি দেওয়া, আপনার সম্পর্কে পড়া উচিত:
- সহচর অবজেক্টস - জাভাতে ক্লাস অবজেক্টের সমান, তবে ক্লাসে একক সিঙ্গলটন যা স্থির নয়
@JvmStatic
- এমন একটি টীকা যা জাভা ইন্টারপের জন্য বাইরের শ্রেণিতে কোনও সহকর্মী অবজেক্ট পদ্ধতিটিকে স্থির পদ্ধতিতে রূপান্তর করে
lateinit
- var
আপনার যখন একটি সংজ্ঞায়িত জীবনচক্র থাকে তখন কোনও সম্পত্তি প্রাথমিকভাবে অনুমতি দেয়
Delegates.notNull()
- এমন lateinit
কোনও সম্পত্তির পরিবর্তে ব্যবহার করা যেতে পারে যা পড়ার আগে কমপক্ষে একবার সেট করা উচিত।
এখানে কোটলিনের পরীক্ষার শ্রেণীর পূর্ণ উদাহরণ যা এম্বেড থাকা সংস্থানগুলি পরিচালনা করে।
প্রথমটি সোলার-আন্ডারটও পরীক্ষাগুলি থেকে অনুলিপি করা হয় এবং সংশোধন করা হয় এবং পরীক্ষার কেসগুলি চালানোর আগে সোলার-আন্ডারটওয় সার্ভারটি কনফিগার করে এবং শুরু করে। পরীক্ষা চালানোর পরে, এটি পরীক্ষাগুলির দ্বারা তৈরি যে কোনও অস্থায়ী ফাইলগুলি সাফ করে। এটি পরীক্ষাগুলি চালুর আগে পরিবেশের ভেরিয়েবল এবং সিস্টেমের বৈশিষ্ট্যগুলি সঠিক কিনা তাও নিশ্চিত করে। পরীক্ষার ক্ষেত্রে এটি কোনও অস্থায়ী লোড হওয়া সোলার কোরগুলি আনলোড করে। পরীক্ষা:
class TestServerWithPlugin {
companion object {
val workingDir = Paths.get("test-data/solr-standalone").toAbsolutePath()
val coreWithPluginDir = workingDir.resolve("plugin-test/collection1")
lateinit var server: Server
@BeforeClass @JvmStatic fun setup() {
assertTrue(coreWithPluginDir.exists(), "test core w/plugin does not exist $coreWithPluginDir")
resetEnvProxy()
cleanSysProps()
routeJbossLoggingToSlf4j()
cleanFiles()
val config = mapOf(...)
val configLoader = ServerConfigFromOverridesAndReference(workingDir, config) verifiedBy { loader ->
...
}
assertNotNull(System.getProperty("solr.solr.home"))
server = Server(configLoader)
val (serverStarted, message) = server.run()
if (!serverStarted) {
fail("Server not started: '$message'")
}
}
@AfterClass @JvmStatic fun teardown() {
server.shutdown()
cleanFiles()
resetEnvProxy()
cleanSysProps()
}
private fun cleanSysProps() { ... }
private fun cleanFiles() {
coreWithPluginDir.resolve("data").deleteRecursively()
Files.deleteIfExists(coreWithPluginDir.resolve("core.properties"))
Files.deleteIfExists(coreWithPluginDir.resolve("core.properties.unloaded"))
}
}
val adminClient: SolrClient = HttpSolrClient("http://localhost:8983/solr/")
@Before fun prepareTest() {
}
@After fun cleanupTest() {
unloadCoreIfExists("tempCollection1")
unloadCoreIfExists("tempCollection2")
unloadCoreIfExists("tempCollection3")
}
private fun unloadCoreIfExists(name: String) { ... }
@Test
fun testServerLoadsPlugin() {
println("Loading core 'withplugin' from dir ${coreWithPluginDir.toString()}")
val response = CoreAdminRequest.createCore("tempCollection1", coreWithPluginDir.toString(), adminClient)
assertEquals(0, response.status)
}
}
এবং এম্বেডেড ডাটাবেস হিসাবে আর একটি ডাব্লুএস ডায়নামোডিবি স্থানীয় সূচনা ( অ্যাডাব্লুএস ডায়নামোডিবি-স্থানীয় এম্বেডেড থেকে চালানো থেকে কিছুটা অনুলিপি এবং সংশোধিত )। java.library.path
অন্য কিছু হওয়ার আগে বা স্থানীয় ডায়নামোডিবি (বাইনারি লাইব্রেরি সহ স্ক্লাইট ব্যবহার করে) চালাতে না পারার আগে এই পরীক্ষাটি অবশ্যই হ্যাক করতে হবে। তারপরে সমস্ত পরীক্ষার ক্লাসে ভাগ করার জন্য এটি একটি সার্ভার শুরু করে এবং পরীক্ষার মধ্যে অস্থায়ী ডেটা পরিষ্কার করে cle পরীক্ষা:
class TestAccountManager {
companion object {
init {
val dynLibPath = File("./src/test/dynlib/").absoluteFile
System.setProperty("java.library.path", dynLibPath.toString());
val fieldSysPath = ClassLoader::class.java.getDeclaredField("sys_paths")
fieldSysPath.setAccessible(true)
fieldSysPath.set(null, null)
System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.Slf4jLog")
}
private val localDbPort = 19444
private lateinit var localDb: DynamoDBProxyServer
private lateinit var dbClient: AmazonDynamoDBClient
private lateinit var dynamo: DynamoDB
@BeforeClass @JvmStatic fun setup() {
localDb = DynamoDBProxyServer(localDbPort, LocalDynamoDBServerHandler(
LocalDynamoDBRequestHandler(0, true, null, true, true), null)
)
localDb.start()
val auth = BasicAWSCredentials("fakeKey", "fakeSecret")
dbClient = AmazonDynamoDBClient(auth) initializedWith {
signerRegionOverride = "us-east-1"
setEndpoint("http://localhost:$localDbPort")
}
dynamo = DynamoDB(dbClient)
AccountManagerSchema.createTables(dbClient)
dynamo.listTables().forEach { table ->
println(table.tableName)
}
}
@AfterClass @JvmStatic fun teardown() {
dbClient.shutdown()
localDb.stop()
}
}
val jsonMapper = jacksonObjectMapper()
val dynamoMapper: DynamoDBMapper = DynamoDBMapper(dbClient)
@Before fun prepareTest() {
setupStaticBillingData(dbClient)
}
@After fun cleanupTest() {
deleteAllInTable<Account>()
deleteAllInTable<Organization>()
deleteAllInTable<Billing>()
}
private inline fun <reified T: Any> deleteAllInTable() { ... }
@Test fun testAccountJsonRoundTrip() {
val acct = Account("123", ...)
dynamoMapper.save(acct)
val item = dynamo.getTable("Accounts").getItem("id", "123")
val acctReadJson = jsonMapper.readValue<Account>(item.toJSON())
assertEquals(acct, acctReadJson)
}
}
দ্রষ্টব্য: উদাহরণগুলির কয়েকটি অংশ সংক্ষেপে বর্ণিত...