为什么通过扩展课程来测试课程被认为是不好的做法?

时间:2019-04-16 09:59:45

标签: java unit-testing oop testing

据我了解,测试类有两种主要方法。

  1. 测试类以扩展被测类
  2. 测试类以创建被测类(组成)

据我所知,第一种方法被认为是不好的做法。

但是为什么呢?

1 个答案:

答案 0 :(得分:1)

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

  1. 验证测试对象正在执行我期望的操作
  2. 记录如何正确使用经过测试的类

通过扩展测试的类,测试接缝可能会更改类的行为。这是测试的不良做法。 有时候我什至可以解决这个问题,例如,如果没有DI,则像这样修改当前时间依赖性:

   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进行测试,以使测试稳定。

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