在 Swift 中,要测试默认访问级别类,可以将 @testable
放在测试类 header 中,使内部访问级别类可以从测试包访问和测试,而无需在类公开。我想知道 Java 是否有办法达到同样的目的?
如何在不公开类中的所有内容的情况下从测试包测试 Java 中的默认访问级别类?
最佳答案
有些java lib中有@VisibleForTesting注解,但一般不会阻止非法访问。即使使包 protected 也不能解决所有问题,因为仍然有一些其他类可以使用测试代码,这可能会导致一些意外行为。我最近偶然发现了一个很好的结构,它允许你展示关于公开一些测试方法的意图
public class A{
private int someMethodYouWantToTest(){}
private Testability testability = new Testability();
class Testability{
int exposedMethodForTest(){
someMethodYouWantToTest()
}
}
}
然后在你的测试类中
public class Test{
private A underTest = new A()
public void testHiddenMethod(){
a.testability.exposedMethodForTest()
}
}
这样您的私有(private)方法就是私有(private)的,只有通过明确说明其用途的专用可测试性内部类才能访问,因此没有人会在测试之外意外调用您的方法。这解决了可能从其他地方调用但实际上是私有(private)的包保护业务方法的问题。
关于java - 如何在不公开所有内容的情况下测试 Java 中的默认访问级别类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38218379/