kotlin,单元测试如何断言类构造函数是不公开的



将java转换为kotlin,它有一个java包级别的可见性类

class NotificationManager extends Base {
NotificationManager(Context context) {
super(context);
... ...
}

断言该构造函数的单元测试不是公共

@Test
public void verify_Constructor() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Constructor<NotificationManager> constructor = NotificationManager.class.getDeclaredConstructor(Context.class);
constructor.newInstance(application);
assertFalse(Modifier.isPublic(constructor.getModifiers()));
}

转换kotlin后,它变成内部可视

internal class NotificationManager internal constructor(context: Context) : Base(context) {...}

但在CCD_ 1测试失败。

在单元测试中,如何断言kotlin内部类构造函数不是公共的?

您可以使用Kotlin反射来获取构造函数的KVisibility并进行检查。

@Test
public void verify_Constructor() {
KClass<?> kClass = JvmClassMappingKt.getKotlinClass(NotificationManager.class);
boolean hasPublicConstructor = kClass.getConstructors().stream()
.map(KFunction::getVisibility)
.filter(Objects::nonNull) // package-private and java-protected are null
.anyMatch(kVisibility -> kVisibility.equals(KVisibility.PUBLIC));
assertFalse(hasPublicConstructor);
}

最新更新