是否添加了太多的存根方法是为测试添加特殊构造函数的原因? (过度嘲笑)

时间:2017-03-09 14:35:53

标签: java android unit-testing mocking mockito

我想为类ClassToBeTested.execute()中的方法添加单元测试。 ClassToBeTested是从REST api收到的业务模型类。要调用该方法,我必须:

  • 创建一个类AAAclass(必须有2个内部类模拟和存根7方法来调用我想要测试的方法)
  • AAAclass放入ClassToBeTested; ClassToBeTested取决于AAAclass

AAAclass看起来像:

    public class AAAclass {
        @SerializedName("BBBclass")
        private BBBclass BBBclass;

        public class BBBclass {
            @SerializedName("CCCclass")
            private CCCclass ccc;

            public DDDclass getDDD() {
                if (ccc != null) {
                    return ccc.getDDD();
                }
                return null;
            }
        }

        private class CCCclass {
            @SerializedName("DDDclass")
            private DDDclass ddd;

            public DDDclass getDDD() {
                return ddd;
            }
        }

        public class DDDclass {
        }
    }

我觉得我做错了,似乎是over mocking

  

不要模拟你的模型:更容易阅读,你可能会为你的生产或测试代码库添加方便的构造函数/工厂方法。

那么我真的应该添加一个特殊的构造函数来在单元测试中使用它吗?

1 个答案:

答案 0 :(得分:0)

如前所述,很难确定对象是什么以及上下文是什么。

但是看起来你提到的课程是DTOs,但同时他们的获取者也有一些商业逻辑。

首先,我建议您将业务逻辑提取到其他地方(例如某些服务)。它不应该存在于dto对象中。

二。为什么BBBclassCCCclassDDDclass是AAA类的内部类?你不能制作它们static吗?或者更多事件可以将它们提取到单独的类中吗?降低系统复杂性非常重要。

我认为如果你解决了这个问题,你就不再需要嘲笑这样一个复杂的对象了。

同时请记住,如果您考虑为可测试性添加构造函数/方法,那么这已经是一个不好的迹象。这意味着您的系统变得越来越复杂,抽象也不能很好地运作。尝试重新考虑你的抽象。