2017-10-05 19 views
-2
@RunWith(MockitoJUnitRunner::class) 
class RoundingTest { 
    lateinit var rounding: (Double) -> Double 

@Before 
fun initValues(){ 
    rounding(17.25) 
} 

    @Test 
    fun checkRounding() { 
     rounding(17.25) 

     var rounding = MyRoundingClass.roundValue(Myobject); 
     Assert.assertEquals(17.23, rounding) 
    } 
} 
object MyRoundingClass{ 
fun roundValue(myObject: MyObject): (Double) -> Double { 
     return when (myObject.isrouding?.needed) { 
      ROUND_DOWN -> { value -> roundDown(BigDecimal.valueOf(value)) } 
      else -> 
       // no rounding 
       { value -> value } 
     } 
    } 
} 

在roundValue方法的value參數會從我的片段效果很好四捨五入(17.25)進行轉讓,但它測試它不工作。 它給了我下面的錯誤 kotlin.UninitializedPropertyAccessException:lateinit財產舍入尚未初始化在科特林單元測試如何分配lateinit VAR

at com.appetizeactivate.android.rounding.RoundingStatergyTest.checkRoundingWithNone(RoundingTest.kt:23) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37) 
at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 

回答

2

它看起來像你需要改變的類型,並使其

lateinit var rounding:() -> Double 

,併爲其分配as

rounding = { 17.25 } 

然後用它作爲rounding()(介意plarentheses)。