繁体   English   中英

单元测试-如果测试方法过早失败,该如何模拟?

[英]Unit tests - What to Mock if tested method fails early?

假设我们有以下简单的示例代码:

public void doXYZ(UUID uuidA, UUID uuidB, UUID uuidC){

ObjectA objectA = objectAService.read(uuidA);

ObjectB objectB = objectBService.read(uuidB);

    if(!doMatch(objectA, objectB)){
        throw new ObjectsDoNotMatchException(objectA);
    }

    ObjectC objectC = objectCService.read(uuidC);
    objectC.setObjects(objectA, objectB);

    objectJobService.doWork(objectC);

}

并且会有一个测试用例,它测试并期望由于某些匹配问题而引发异常。

问题:模拟前两个服务+ objectValidationService是否足够,因为如果测试用例可行,则其他所有服务都无法访问? 还是应该模拟objectCService以及objectJobService,因为它们可能会被调用,并且如果测试无法按预期进行,则返回NullPointerException?

我经常问这样的问题,这些方法是否不如所示的方法那么琐碎,而是具有多个其他依赖关系,应该对其进行模拟,因为为整个路径生成有效状态可能是很多工作(未经测试)在此测试用例中),用于早期失败的情况。

编辑:让我们更具体。 如果应该对它们进行嘲笑:是否不指定返回值(例如,使用when())并让它们只是失败还是足够?应该嘲笑那些通常不需要的服务也返回有效值?

是:应该嘲笑所有服务。

您要确保当对象A和B不匹配时,与objectCServiceobjectJobService没有交互。

暂无
暂无

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

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