Created
November 26, 2018 18:24
-
-
Save dimka11/ede4eca51aa22189eccec1eb78ad70a6 to your computer and use it in GitHub Desktop.
IoC myTests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package funWithIoC | |
import hwdtech.ioc.* | |
import org.junit.Test | |
import org.mockito.Mockito | |
import java.lang.AssertionError | |
import kotlin.test.* | |
class HelloTest { | |
class MyObject(val str: String) { | |
operator fun invoke() = println(str) | |
} | |
class ConcreteStrategy : IIoCResolverStrategy { | |
override fun invoke(args: Array<out Any>): Any { | |
return args[0] | |
} | |
} | |
@Test | |
fun `my test always create new outside`() { // always new object | |
register("dep") { MyObject("Hello") } | |
val mo1 = resolve<MyObject>("dep") //need resolve type as Interface type not concrete like in my examples !!! | |
val mo2 = resolve<MyObject>("dep") | |
assertNotEquals(mo1, mo2) | |
assertNotSame(mo1, mo2) | |
} | |
@Test | |
fun `my test always return same object`() { // aka Singleton | |
val mo__ = MyObject("World") | |
val rs = | |
register("dep") { return@register mo__; } | |
val mo1 = resolve<MyObject>("dep") | |
val mo2 = resolve<MyObject>("dep") | |
assertSame(mo1, mo2) | |
} | |
class ConcreteStrategyWithParameters : IIoCResolverStrategy { | |
override fun invoke(args: Array<out Any>): Any { | |
return MyObject(args[0] as String) | |
} | |
} | |
@Test | |
fun `my test ctor object inside`() { // aka create object with new inside class | |
register("dep", ConcreteStrategyWithParameters()) | |
val mo1 = resolve<MyObject>("dep", "Hello") | |
val mo2 = resolve<MyObject>("dep", "World") | |
mo1() | |
mo2() | |
} | |
@Test | |
fun `smth with scope`() { | |
Scopes.startNew().use { | |
val obj: Any = 1 | |
register("dep") { return@register obj; } | |
assertEquals(1, resolve<Int>("dep")) | |
} | |
Scopes.startNew() | |
val obj2: Any = 2 | |
register("dep") { return@register obj2; } | |
assertEquals(2, resolve<Int>("dep")) | |
} | |
fun createScope() : IScope { | |
val obj2: Any = 123 | |
val sc = Scopes.startNew() | |
sc.register("dep123") { return@register obj2 } | |
return sc | |
} | |
@Test | |
fun `scopes again`() { | |
`smth with scope`() | |
assertEquals(2, resolve<Int>("dep")) | |
val aaa = createScope().resolve("dep123") | |
//aaa.invoke().toString() // хз | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment