我应该隔离多少单元测试的方法



>我有以下方法:

public < V extends U > boolean matchesObject (V object, String filter) {
    if (filterIsAny(filter)) return true;
    else {
        List<T> targets = getFilterTarget(object);
        for (T t : targets) if (matches(t, filter)) return true;
        return false;
    }
}

其中 filterIsAny(filter( 是一个简单的方法(只需检查 filter != null(。

我的

问题是:当我进行单元测试时,是否值得模拟此方法,以便我确定我的函数遵循函数中的正确路径,或者我只是假设我的 filterIsAny(filter( 工作并使用 real 方法进行测试?在这种特殊情况下,模拟此方法非常容易,但我还有其他实例,其中需要几行代码来模拟由琐碎函数返回的中间结果,例如模拟对象列表中的 list.indexOf(object(。

我知道这不会是"纯粹的"单元测试,因为理论上我会一次测试多个函数,但是当它需要比在测试失败的情况下查找代码中的错误需要更多的工作时,如何值得进行纯单元测试?

假设filterIsAny工作,直到它获得非平凡的逻辑。

如果您的函数是没有逻辑分支的单个纯 Java 语句的包装器,则可以安全地跳过为它编写单元测试,因此只能在其他单元测试中编写它。您要测试的是要测试的方法中的各种分支,假设它具有非平凡的逻辑。

在这里,您将设置筛选器对象,以便在基于要测试的逻辑分支(集合中没有匹配项、集合中一个匹配项、集合类型无效(如果可能(、null 输入等(测试matchesObject(V object, String filter)时生成truefalse结果。

在您的情况下,您可以跳过计算到 true 分支filterIsAny(filter),因为您return true之后执行一个简单的语句。

顺便说一下,如果可能的话,考虑重构Stream.anyMatch();它将减少函数中返回语句的数量并增强可读性。

最新更新