繁体   English   中英

我将如何测试使用共享私有/公共方法的两种方法?

[英]How would I test two methods that use shared private/public method?

public class A {
    public List<Model> getModels() {
        List<Model> models = (some logic to find all models...)
        models.forEach(model -> doSharedLogic(model));
    }

    public Model getModel(int id) {
        Model model = (some logic to find Model by Id...)
        doSharedLogic(model);
    }    

    private void doSharedLogic(Model model) {
        // manipulations with model...       
    }
}

假设我有上面的代码。 我想对 public API(getModels 和 getModel 方法)进行单元测试。 他们使用提取到单独方法 doSharedLogic() 中的共享逻辑。

问题:如果基本逻辑完全相同,如何正确测试这两种方法?
**我的假设:**
通过测试 doSharedLogic() 的所有可能结果来测试 getModel 方法;
对 getModels() 做同样的事情;

但它会导致测试中的代码重复。
如果我只是将 doSharedLogic 作为这些公共方法之一(例如:getModel())的一部分进行测试,我不能确定以后不会有人来,更改某些内容并破坏第二种方法(getModels())中的代码例如删除共享逻辑

我的假设:测试 getModel 方法,测试 doSharedLogic() 的所有可能结果;对 getModels() 做同样的事情;

我会测试每种方法的作用并避免重复。

  • 您有 getModel() 获取单个实例。 测试与获取一个实例相关的情况,包括边缘情况,例如未找到。 如果这段代码也在做数据转换,那么我会在这里测试转换后的数据是否正确,可能使用模拟来注入数据。
  • 你有 getModels() 得到倍数 - 如果它不接受一些查询字符串,那么所有这些都可能。 测试返回多个模型的案例,包括单个案例或空案例。 由于此代码只是在幕后调用 getModel(),因此您不应重现任何转换逻辑测试,而应专注于测试“get many”的附加逻辑。

如果您真的担心有人稍后会更改 getModels() 的 lgoic 以不调用 getModel(),我会将其放在 getModel() 的评论中,以便未来的编辑知道如果他们删除该依赖项,他们可能需要添加额外的测试.

我绝对不会在两者中添加一堆重复的数据转换测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM