注释,使私有方法仅对测试类公开

2022-08-31 09:22:36

谁有解决这种共同需求的解决方案。

我的应用程序中有一个类。

有些方法是公共的,因为它们是api的一部分,有些是私有的,因为它们用于内部使用,使内部流更具可读性

现在,假设我想写一个单元测试,或者更像一个集成测试,它将位于不同的包中,这将被允许调用此方法,但是,我希望如果你尝试从应用程序本身的类调用它,则不允许对此方法进行正常调用。

所以,我在想这样的事情

public class MyClass {

   public void somePublicMethod() {
    ....
   }

   @PublicForTests
   private void somePrivateMethod() {
    ....
   }
}

上面的注释将私有方法标记为“公共测试”,这意味着,对于正在测试的任何类,将允许编译和运行时...包 ,而编译和/或运行时对于任何不在测试包下的类都将失败。

有什么想法吗?有没有这样的注释?有没有更好的方法来做到这一点?

似乎你写的单元测试越多,你就越强迫打破你的封装......


答案 1

常用的方法是使私有方法受保护或包私有,并将此方法的单元测试放在与所测试类相同的包中。

番石榴有一个@VisibleForTesting注释,但它仅用于文档目的。


答案 2

如果您的测试覆盖率在测试类内的所有公共方法上都很好,则由公共方法调用的私有方法将自动测试,因为您将断言所有可能的情况。

JUnit Doc 说:

测试私有方法可能表明应将这些方法移动到另一个类中以提高可重用性。但如果你必须...如果您使用的是 JDK 1.3 或更高版本,则可以借助 PrivilegedAccessor 使用反射来颠覆访问控制机制。有关如何使用它的详细信息,请阅读本文。


推荐