Tag: mockito

使用Mockito和InjectMocks时Kotlin懒惰块不执行

我正在使用Mockito来测试我的Kotlin代码。 这是一个网络应用程序,我用弹簧注入值的一些领域。 例如,我的课程代码片段如下所示: class MyComponent { @Inject private lateinit var request: HttpServletRequest @Inject private lateinit var database: Database 为了在我的单元测试中模仿这个,我使用了@InjectMocks的@Mock和@InjectMocks注解。 所以我的测试看起来像这样: class MyComponentTest { @Mock private lateinit var request: HttpServletRequest @Mock private lateinit var database: Database @InjectMocks private lateinit var sut: MyComponent @Before fun setup() { MockitoAnnotations.initMocks(this) } 这一切工作正常。 不过,我的组件中也有一个懒惰的初始化块,像这样: val user: User by lazy { […]

如何在kotlin中列出<MyClass> :: clas.java`

我想在kotlin使用ArgumentCaptor 。 我做了什么: val c := ArgumentCaptor<List<MyClass>, List<MyClass>>.forClass(List<MyClass>::class.java) 但它说 Only classes are allowed on the left hand side of a class literal

使用Mockito,我如何用val接口字段声明监听Kotlin类?

我试图在Android中使用Mockito来测试Kotlin的改造api客户端类,如下所示: class SomeApiClient : SomeApi { private val service: SomeApiService constructor(service: SomeApiService) { this.service = service } } 它实现了SomeApi接口并包含一个改进的服务接口作为构造参数。 当用Mockito监听类时,这些类需要没有参数的构造函数,否则你的测试将会失败,并带有MockitoException : org.mockito.exceptions.base.MockitoException:无法初始化@Spy带注释的字段'SomeClass'。 请确保“SomeClass”类型具有无参数构造函数。 如果类具有包含默认值的所有参数的构造函数,那么Kotlin为其生成无参数的构造函数。 但是,如果类接收到构造函数参数的interface (并且具有与val声明相对应的字段),那么我们如何应用默认值或声明空的构造函数呢? 谢谢!

Mockito ArgumentCaptor为Kotlin函数

考虑一个将接口实现作为参数的函数,如下所示: interface Callback { fun done() } class SomeClass { fun doSomeThing(callback: Callback) { // do something callback.done() } } 当我想测试这个函数的调用者时,我可以做类似的事情 val captor = ArgumentCaptor.forClass(Callback::class) Mockito.verify(someClass).doSomeThing(captor.capture()) 为了测试其他类在调用回调函数时的作用,我可以这样做 captor.value.done() 问题:如果用高阶函数替换回调接口,我该怎么做 fun doSomeThing(done: () -> Unit) { // do something done.invoke() } 这可以用ArgumentCaptor完成,我必须在ArgumentCaptor.forClass(???)使用哪个类

是否有可能与mockito-kotlin一起使用doReturn()和CALLS_REAL_METHODS?

我的理解是,使用doReturn()与mockito-kotlin是我必须从内部调用它 val mockObj = mock<TheClass> { on { method } doReturn something } 我怎样才能指定这必须使用CALLS_REAL_METHODS ? 或者我可以用val mockObj : TheClass = mock(Mockito.CALLS_REAL_METHODS)以其他方式使用doReturn() val mockObj : TheClass = mock(Mockito.CALLS_REAL_METHODS)而不是? 只是为了澄清 – 这是一个doReturn() (不是when/whenever )的问题

Kotlin中的<reified T:Any>有什么不同?

下面的测试课,通过。 class SimpleClassTest { private inline fun <reified T> anyObject(): T { return Mockito.anyObject<T>() } 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 <reified T> anyObject(): T { return Mockito.anyObject<T>() } 至 private […]

没有开放课程,可以和Kotlin一起使用Mockito吗?

正如我们可能知道的那样,默认情况下Kotlin类曾经定义过,除非明确声明为open ,否则它是最终的。 当我们想用Mockito来模拟它时,这将会带来挑战。 我们需要明确宣布它是open 。 有没有办法我们可以避免宣布它是open而能够为我们的测试模拟它?

测试Android Kotlin应用程序 – 用匕首Mockito注入null

我正在学习使用Mockito和Robolectric在Android上进行测试。 我用RxJava和Dagger2在Kotlin中使用Clean Architecture创建了一个非常简单的应用程序。 一切正常,但我不能让我的测试通过。 这是我的LoginPresenterTest: @RunWith(RobolectricGradleTestRunner::class) @Config(constants = BuildConfig::class) public class LoginPresenterTest { private lateinit var loginPresenter: LoginPresenter @Rule @JvmField public val mockitoRule: MockitoRule = MockitoJUnit.rule() @Mock private lateinit var mockContext: Context @Mock private lateinit var mockLoginUseCase: LoginUseCase @Mock private lateinit var mockLoginView: LoginView @Mock private lateinit var mockCredentialsUseCase: GetCredentials @Before public fun setUp() { […]

如何测试在Kotlin中调用顶层函数的代码?

我对Kotlin很新。 我有一个类调用顶级功能(这使得一个http调用)。 我正在尝试为我的课程编写单元测试,而不必将其发布到网络上。 有没有办法模拟/ powermock /拦截从我的课到Kotlin顶级功能的呼叫? class MyClass { fun someMethod() { // do some stuff "http://somedomain.com/some-rest/action".httpGet(asList("someKey" to "someValue")).responseString { (request, response, result) -> // some processing code } } } 它使用kittinunf / Fuel库进行httpGet调用。 它将一个顶级函数添加到String中,最终在Fuel(Fuel.get())中调用伴随对象函数。 单元测试需要拦截对httpGet的调用,以便我可以返回测试的json字符串。

如何使用Mockito Kotlin片段/活动来模拟kotlinx.android.synthetic的意见

我有一个在Kotlin写的片段。 我使用导入布局视图 导入kotlinx.android.synthetic.main.my_fragment_layout。* 在我的Fragment类中的一个方法中,我在布局中为TextView设置文本。 例如: fun setViews() { myTextView.text = "Hello" // In Java I would have used: // (getView().findViewById(R.id.myTextView)).setText("Hello"); } 在我的Mockito单元测试中,我想测试这个方法。 例如,如果上面的方法是用java编写的,我可以测试如下: public void setViewsTest() { // Mock dependencies View view = Mockito.mock(View.class); TextView myTextView = Mockito.mock(TextView.class); when(fragment.getView()).thenReturn(view); when(view.findViewById(R.id. myTextView)).thenReturn(myTextView); // Call method fragment.setViews(); // Verify the test verify(myTextView).setText("Hello"); } 当我在Kotlin中编写片段时,如何执行类似的实现,并使用以下导入视图: import kotlinx.android.synthetic.main.my_fragment_layout。