这里是 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/