将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);
}