sách gpt4 ai đã đi

java - Mockito的argThat在Kotlin中返回null

In lại 作者:行者123 更新时间:2023-12-01 10:37:30 28 4
mua khóa gpt4 Nike

给定以下类(class)(用kotlin编写):

class Target {
fun target(filter: String, mapper: (String) -> R): R = mapper(filter)
}

我可以在Java中测试代码:
@Bài kiểm tra
public void testInJava() {
Target mockTarget = Mockito.mock(Target.class);
Mockito.when(mockTarget.target(
argThat(it -> true),
Mockito.argThat(it -> true)
)).thenReturn(100);
assert mockTarget.target("Hello World", it -> 1) == 100;
}

Java测试通过了预期的结果,但相同的测试用kotlin编写:
@Bài kiểm tra
fun test() {
val mockTarget = Mockito.mock(Target::class.java)
Mockito.`when`(mockTarget.target(
Mockito.argThat { true },
mapper = Mockito.argThat<>>({ true }))
).thenReturn(100)
assert(mockTarget.target("Hello World") { 1 } == 100)
}

Kotlin版本我收到以下异常:
java.lang.IllegalStateException: Mockito.argThat { true } must not be null

为什么会发生这种情况,如何使用Kotlin进行测试?

1 Câu trả lời

我也面临同样的问题。
最后,我发现argThat()将返回null,通常kotlin函数中的参数不接受null类型。argThatcủaArgumentMatchers.java的源代码

public static  T argThat(ArgumentMatcher matcher) {
reportMatcher(matcher);
trả về giá trị null;
}
您可以看到它是 return null。因此,当我们模拟该函数时,它将抛出IllegalStateException,因为 argThat 返回null ,且参数不能为null。
这意味着如果您的功能是:
fun doSomething(arg1: String): Int {
// làm gì đó
}
当您像这样 mock 它时:
Mockito.`when`(
doSomething(Mockito.argThat { true })
).thenReturn(100)
它将抛出IllegalStateException
因此,您应该像这样更改功能:
fun doSomething(arg1: String?): Int {
// làm gì đó
}
将“字符串”更改为“字符串?”,使其接受空类型。
我的解决方案是用类定义参数?这样它就可以接受null,但是我不知道这是否是一个很好的解决方案

关于java - Mockito的argThat在Kotlin中返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52389727/

28 4 0
Bài viết được đề xuất: clojure - 为什么 Clojure 中的零不是假的?
Bài viết được đề xuất: api - 通过 API 设置 Nest 目标湿度
Bài viết được đề xuất: java - 如何使用utf-8导出Excel CSV并读入Java?
Bài viết được đề xuất: build - 突然 grunt 构建失败
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com