gpt4 book ai didi

java - 在 Kotlin 中测试非空参数

转载 作者:行者123 更新时间:2023-11-30 05:28:32 25 4
gpt4 key购买 nike

这里是 Kotlin 新手!

我刚刚将一些 Java 测试代码转换为 Kotlin,而空代码的特定情况目前困扰着我。我正在尝试测试(在 Kotlin @Test 代码段中)此 java 函数是否引发正确的 InvalidParameterException:

void addEventListener(
@NonNull DeviceEventListener listener,
@Nullable CompletionListener completionListener);

所以这个函数是通过 Kotlin 代码调用的(在从 java 转换为 kotlin 之前运行良好),如下所示:之前在 Java 中:

deviceTest.addEventListener(null, testCompletionListener);
waiter.expect(InvalidParameterException.class);

测试运行良好,没有出现错误。

转换到 Kotlin 后,代码变得无法访问或引发 KotlinNullPointerException:

deviceTest!!.addEventListener(null!!, testCompletionListener)
waiter!!.expect(InvalidParameterException::class.java)

我是 Kotlin 的新手,并且严重迷失了如何让它像以前在 Java 中那样工作。有什么想法吗?

感谢您抽出时间!

最佳答案

首先,在您的示例中,您使用 @NonNull,但我假设您的意思是 @NotNull,因为这是 Kotlin 使用的正确注释。

其次,我假设您采用在 Kotlin 中编写测试的方法,但仍然在 Java 代码中使用这些函数。否则,如果您的代码库仅使用 Kotlin,则此测试毫无意义。

第三,如果您尝试将 null 分配给 @NotNull 参数,您应该收到 IllegalArgumentException,而不是 InvalidParameterException >

最后,您可以利用平台类型来模拟这种情况:

// This should be a Java class
public class Nulls {
public static final DeviceEventListener NULL_DEVICE_EVENT_LISTENER = null;
}

// In Kotlin
deviceTest.addEventListener(Nulls.NULL_DEVICE_EVENT_LISTENER, testCompletionListener)

但是由于 Nulls 无论如何都是一个 Java 类,因此您也可以将整个测试保留为 Java,正如评论中所建议的那样。

关于java - 在 Kotlin 中测试非空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58030409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com