【问题标题】:Private class unit tests私有类单元测试
【发布时间】:2013-09-01 16:08:14
【问题描述】:

如何对 java 中的私有(包可见性)进行单元测试?

我有一个包,这个包中只有一个类是公共的,其他类是私有的。如何用单元测试覆盖其他类?我想在 resting jar 中包含单元测试。

【问题讨论】:

  • 它们是私有的还是包私有的?如果它们是包私有的,那么您可以像任何其他类一样测试它们,前提是您的测试在同一个包中(它们应该)...

标签: java unit-testing junit private


【解决方案1】:

在同一个包中创建单元测试类。

例如,如果com.example.MyPrivateClass 位于src/main/java/com/example/MyPrivateClass.java

那么测试类将在同一个包com.example.MyPrivateClassTestCase中,并将位于src/test/java/com/example/MyPrivateClassTestCase.java

【讨论】:

    【解决方案2】:

    如@Kowser 的回答所示,测试可以在同一个包中。

    在 Eclipse 中,我假设其他 IDE 可以在不同的项目中拥有类,但在同一个包中。可以将一个项目声明为依赖于另一个项目,从而使另一个项目的类可用。这允许一个单独的单元测试项目依赖于生产项目并遵循其包结构,但有自己的根目录。

    这种结构使测试代码与生产代码完全分离。

    【讨论】:

      【解决方案3】:

      有两种方法可以做到这一点。

      标准方法是在要测试的类的同一个包中定义您的测试类。这应该很容易完成,因为现代 IDE 默认在被测试类的同一个包中生成测试用例。

      非标准但非常有用的方法是使用反射。这允许您将私有方法定义为真正的“私有”而不是“包私有”。例如,如果你有课。

      class MyClass {
          private Boolean methodToBeTested(String argument) {
              ........
          }
      }
      

      你可以有这样的测试方法:

      class MyTestClass {
      
          @Test
          public void testMethod() {
              Method method = MyClass.class.getDeclaredMethod("methodToBeTested", String.class);
              method.setAccessible(true);
              Boolean result = (Boolean)method.invoke(new MyClass(), "test parameter");
      
              Assert.assertTrue(result);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-25
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多