相关疑难解决方法(0)

如何用mockito模拟最后一堂课

我有一个最后的课,类似这样:

public final class RainOnTrees{

   public void startRain(){

        // some code here
   }
}
Run Code Online (Sandbox Code Playgroud)

我在其他类中使用此类,如下所示:

public class Seasons{

   RainOnTrees rain = new RainOnTrees();

   public void findSeasonAndRain(){

        rain.startRain();

    }
}
Run Code Online (Sandbox Code Playgroud)

在我的JUnit测试类中,Seasons.java我想模拟这个RainOnTrees类.我怎么能和Mockito一起做这件事?

java junit mockito

169
推荐指数
13
解决办法
21万
查看次数

如何使用 Mockito.mockStatic 在 kotlin android 中模拟静态方法

如何使用 Mockito.mockStatic 在 kotlin android 中模拟静态方法?

这是我的代码:

    class MyUtilClassTest {
       @Test
       fun testIsEnabled() {
          Mockito.mockStatic(MyUtilClass::class.java, Mockito.CALLS_REAL_METHODS)
                .use { mocked ->
                    mocked.`when`<Boolean> { MyUtilClass.isEnabled() }.thenReturn(true)
                    assertTrue(MyUtilClass.isEnabled())
                }
       }
    }
    
    object MyUtilClass {
       fun isEnabled(): Boolean = false
    }
Run Code Online (Sandbox Code Playgroud)

我收到此异常:

org.mockito.exceptions.misusing.MissingMethodInvocationException: when() 需要一个参数,它必须是“对模拟的方法调用”。例如:when(mock.getArticles()).thenReturn(articles);

此外,出现此错误的原因可能是:

  1. 你存根:final/private/equals()/hashCode() 方法。这些方法不能被存根/验证。不支持在非公共父类上声明的模拟方法。
  2. 在 when() 中,您不会在模拟上调用方法,而是在其他对象上调用方法。

junit android unit-testing mockito kotlin

6
推荐指数
2
解决办法
1719
查看次数

如何模拟 kotlin 对象进行单元测试

我有一个示例方法(我需要编写测试用例),如下所示,

 fun setName(val auxName:String) {
        val configUrl = getConfig(auxName)
    }
Run Code Online (Sandbox Code Playgroud)

我想模拟 getConfig 方法并返回一个特定的字符串值。getConfig 是 Kotlin 对象中的一个方法,如下所示,

object Configuration{
    fun getConfig(auxName:String){
    ....
    }
    }
Run Code Online (Sandbox Code Playgroud)

以下是我尝试过的测试

@Test
fun setTest()
{
val testname="test"
val testObject=Mockito.mock(Configuration::class.java)
doReturn("configTest").`when`(testObject).getConfig(Mockito.anyString())
setName(testname)
}
Run Code Online (Sandbox Code Playgroud)

我没有收到任何错误,但没有模拟 getConfig 方法。执行实际的实现。我也尝试使用 Powermockito。请在这件事上给予我帮助

unit-testing mockito kotlin powermockito

5
推荐指数
1
解决办法
3764
查看次数

如何在Kotlin中模拟物体?

我想测试一个调用一个对象的类(java中的静态方法调用),但是我无法模拟这个对象以避免执行真正的方法.

object Foo {
    fun bar() {
        //Calls third party sdk here
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的选项,如Mockk,如何模拟Kotlin单例对象?并以与java相同的方式使用PowerMock,但没有成功.

使用PowerMockito的代码:

@RunWith(PowerMockRunner::class)
@PrepareForTest(IntentGenerator::class)
class EditProfilePresenterTest {

    @Test
    fun shouldCallIntentGenerator() {

        val intent = mock(Intent::class.java)

        PowerMockito.mockStatic(IntentGenerator::class.java)
        PowerMockito.`when`(IntentGenerator.newIntent(any())).thenReturn(intent) //newIntent method param is context

       presenter.onGoToProfile()

       verify(view).startActivity(eq(intent))        

    }
}
Run Code Online (Sandbox Code Playgroud)

有了这个代码,我得到了

java.lang.IllegalArgumentException:指定为非null的参数为null:方法com.sample.test.IntentGenerator $ Companion.newIntent,parameter context

any()方法来自mockito_kotlin.然后,如果我将一个模拟的上下文传递给newIntent方法,则看起来似乎是真正的方法.

android unit-testing mockito kotlin powermockito

3
推荐指数
1
解决办法
5833
查看次数

标签 统计

mockito ×4

kotlin ×3

unit-testing ×3

android ×2

junit ×2

powermockito ×2

java ×1