Java 我应该为单元测试隔离多少方法?

Java 我应该为单元测试隔离多少方法?,java,unit-testing,testing,junit,mocking,Java,Unit Testing,Testing,Junit,Mocking,我有以下方法: 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

我有以下方法:

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;

    }

}
public布尔匹配对象(V对象,字符串过滤器){
if(filteriany(filter))返回true;
否则{
列表目标=getFilterTarget(对象);
for(T:targets)if(matches(T,filter))返回true;
返回false;
}
}
其中filteriany(filter)是一个简单的方法(只检查filter!=null)

我的问题是:当我进行单元测试时,是否值得模拟此方法,以确保我的函数遵循函数中的正确路径,或者我只是假设我的FilterSany(filter)工作并使用实际方法进行测试?在这个特殊的例子中,模拟这个方法非常容易,但是我还有其他的例子,在这些例子中,模拟由普通函数返回的中间结果需要几行代码,比如模拟对象列表中的list.indexOf(object)


我知道这不是“纯粹”的单元测试,因为理论上我一次测试不止一个函数,但是,如果纯粹的单元测试比在测试失败的情况下查找代码中的错误需要更多的工作,那么它又有什么价值呢?

假设
过滤器正常工作,直到它获得非平凡的逻辑。

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

在这里,您可以设置过滤器对象,使其在测试
matchesObject(V对象,字符串过滤器)
时,基于您正在测试的逻辑分支(集合中没有匹配项,集合中有一个匹配项,集合类型无效(如果可能),输入为空等),生成
true
false
结果

在您的情况下,您可以跳过
filteriany(filter)
求值到true分支,因为之后执行了一条简单的语句
returntrue


顺便说一下,如果可能的话,将重构考虑到<代码> Sturn.yMatHeCH()/<代码>;它将减少函数中返回语句的数量并提高可读性。

为什么需要额外的测试方法!=空值?好吧,它比测试过滤器做的更多一点!=空,但这都是很琐碎的。在任何情况下,这只是一个例子,我想问这个问题是为了找出在测试Ank you时我应该在多大程度上隔离我的代码,我会这样做的