关于java:为什么通过扩展它来测试一个类被认为是一种不好的做法?

Why is it considered a bad practice to test a class by extending it?

据我所知,测试一个类有两种主要方法。

  • 测试类扩展被测试的类
  • 测试类创建被测试的类(组合)
  • 据我所知,第一种方法被认为是一种不好的做法。

    但为什么呢?


    对我来说,单元测试有两个主要目的:

  • 验证测试对象是否按照我的预期进行操作
  • 记录如何正确使用测试类
  • 通过扩展测试类,测试接缝可能会改变类的行为。 这对于测试来说是不好的实践。
    有时我甚至会修复例如当前时间依赖性,如果DI不是选项:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       private InstanceToTest instance;
       private Calendar now = new GregorianCalendar(2019, 4, 4, 13, 23, 47);
       @Before
       public void initInstance() {
          instance = new InstanceToTest() {
             @Override
             Calendar getNow() {
                return now;
             }
          };
       }

    现在我可以测试2019年4月4日13:23:47以使测试稳定。

    有时我想分别测试提取的内部方法。 我更喜欢将这些方法包私有化。 这样我可以从我的测试中调用它们(如果它在测试源文件夹中的同一个包中)而不覆盖它们。