Tag: mockito

为什么$ MockitoMock $实例不被识别为模拟?

我使用Kotlin,Mockito和MockitoJRunner运行以下简化测试: open class SomeClassToBeMocked @Inject constructor() { fun map(foo: Foo): Bar {…} } @Mock private lateinit var someMock: SomeClassToBeMocked @InjectMocks private lateinit var subject: Subject @Test fun shouldAssertSomething() { val foo = Foo() // from Foo.kt val bar = Bar() // from Bar.java from *another module* whenever(someMock.map(foo)).thenReturn(bar) // breakpoint[1] subject.myMethod(foo) verify(someMock).map(foo) } 这种模式在代码的其他部分工作,但不是在这个特定的测试中,我得到以下错误信息: org.mockito.exceptions.misusing.MissingMethodInvocationException: when() […]

Mockito可以在方法调用时根据它们的值validation参数吗?

我有一个Fooclass,是SUT和一个Barclass,这是它的合作者。 Foo调用在“ expectedList ”作为参数的Bar上run(List values) 。 然后, Foo将会添加更多的元素到这个List这样它的状态将和调用run()时的状态不同。 这是我的测试案例。 @Test public void testFoo() { Bar collaborator = spy(new Bar()); Foo sut = new Foo(collaborator); verify(collaborator).run(expectedList); } 请注意,协作者实际上是间谍对象而不是模拟对象。 这个测试用例将失败,因为即使run()被调用的参数等于expectedList ,它也被修改了,因为它的当前值不再等于expectedList 。 然而,这是它应该工作的方式,所以我想知道是否有方法让Mockito在调用方法时存储参数的快照,并根据这些值而不是最近的值来validation它们。

Kotlin中的有什么不同?

下面的测试课,通过。 class SimpleClassTest { private inline fun anyObject(): T { return Mockito.anyObject() } lateinit var simpleObject: SimpleClass @Mock lateinit var injectedObject: InjectedClass @Before fun setUp() { MockitoAnnotations.initMocks(this) } @Test fun testSimpleFunction() { simpleObject = SimpleClass(injectedObject) simpleObject.simpleFunction() verify(injectedObject).settingDependentObject(anyObject()) } } 但如果我们改变 private inline fun anyObject(): T { return Mockito.anyObject() } 至 private inline fun anyObject(): T […]

MockitoJUnitRunner已被弃用

我正在尝试使用@InjectMocks和@Mock进行unit testing。 @RunWith(MockitoJUnitRunner.class) public class ProblemDefinitionTest { @InjectMocks ProblemDefinition problemDefinition; @Mock Matrix matrixMock; @Test public void sanityCheck() { Assert.assertNotNull(problemDefinition); Assert.assertNotNull(matrixMock); } } 当我不包含@RunWith注释时,测试失败。 但 MockitoJUnitRunnertypes已被弃用 我正在使用Mockito 2.6.9。 我应该怎么做呢?

如何在Android项目中的Java模块上模拟Mockito 2的最终课程?

我有一个Android Clean Architecture项目,在Kotlin中有三个模块: 数据(Android库) domaine(Java库) 演示(Android应用程序) 这3个模块都有用junit编写的unit testing 。 但是对于Kotlin,每个课程都是默认的最终课程。 我很快就遇到了问题: 如何用mockito来嘲笑最后一堂课 现在可以用Mockito 2 可以通过mockito扩展机制来完成,方法是创建包含一行的文件/mockito-extensions/org.mockito.plugins.MockMaker : mock-maker-inline 此解决方案在数据模块(Android库)和表示模块(Android应用程序)上运行良好, 但在我的domaine模块(Java库)上不起作用 。 我知道这个问题已经被问到( 如何用mockito来模拟最后一个类 , Mock对象用Mockito来调用最终类的静态方法 ),但是我没有find我正在寻找的答案。

如何模拟Kotlin单身物件?

给定一个Kotlin单身对象和一个叫它的方法的乐趣 object SomeObject { fun someFun() {} } fun callerFun() { SomeObject.someFun() } 有没有办法模拟调用SomeObject.someFun() ?

一个简单的kotlin类与mockito测试引起MissingMethodInvocationException

我开始学习Kotlin和Mockito,所以我编写了一个简单的模块来测试它。 AccountData_K.kt: open class AccountData_K { var isLogin: Boolean = false var userName: String? = null fun changeLogin() : Boolean { return !isLogin } } AccountDataMockTest_K.kt: class AccountDataMockTest_K { @Mock val accountData = AccountData_K() @Before fun setupAccountData() { MockitoAnnotations.initMocks(this) } @Test fun testNotNull() { assertNotNull(accountData) } @Test fun testIsLogin() { val result = accountData.changeLogin() assertEquals(result, […]

doReturn不作为代理,但调用我的方法

我正在实施一些unit testing在我的应用程序,我有一个依赖于依赖于Application上下文。 该依赖返回一个Item列表,但我想嘲笑该逻辑返回任何我想要的。 我已经知道的区别: a) when(foo.method1()).return(bar) b) doReturn(bar).when(foo).method1() (b)不应调用该方法。 现在我有一个在ItemHelper.kt调用的方法: fun retrieveItems(): MutableList { val boxStore = BoxStore.getInstance().getBoxFor(Item::class.java) return boxStore.all } 而.getInstance()依赖于Application 。 既然我想嘲笑它,这是我的考验: class ItemHelperTests { @JvmField @Rule var mockitoRule = MockitoJUnit.rule()!! @Mock private lateinit var itemHelper: ItemHelper @Test fun itemsNumber_Test() { Mockito.doReturn(ArrayList()).`when`(itemHelper).retrieveItems() System.out.println(“this line is unreachable”) } } 但是结束调用我的代码: java.lang.Exception: Please init BoxStore.boxStore […]

ArgumentCaptor vs InOrder来validation后续的回调与不同的参数

我正在测试使用Architecture Components的Room库生成的DAO类。 我想检查加入多个表的查询返回的LiveData是否会在数据更改时更新。 我开始使用InOrdervalidation,但是发现无论我想expression什么论点,Mockito都会说这个方法是用另一个方法调用的(当我把这个断言改为那个时,它会说是另一个) 。 使用一个ArgumentCaptor原来是为了这个目的而正常工作,这是这个问题的主题: 为什么ArgumentCaptorvalidation在这里工作,但InOrder不? 看问题的答案如何validation多个方法调用与不同的参数 ,这两种方法应该工作正常。 下面是我的测试的简化版本,展示了这个问题: package com.example import com.nhaarman.mockito_kotlin.argumentCaptor import com.nhaarman.mockito_kotlin.check import com.nhaarman.mockito_kotlin.mock import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.* import org.mockito.junit.MockitoJUnitRunner @Suppress(“IllegalIdentifier”) @RunWith(MockitoJUnitRunner::class) class MultipleCallbacksVanillaTest { private val java = Language(“Java”) private val javascript = Language(“JavaScript”) private val kotlin = Language(“Kotlin”) private val firstList = emptyList() private val […]

Mockito可以在Kotlin模拟访问者吗?

是否有可能嘲笑Mockito的财产吸气和二传手? 像这样的东西: @Test fun three() { val m = mock() { // on { getQq() }.doReturn(“mocked!”) } assertEquals(“mocked!”, m.qq) } open class Ddd { var qq : String = “start” set(value) { field = value + ” by setter” } get() { return field + ” by getter” } }