103 votes

maquette ou talon pour appel enchaîné

protected int parseExpire(CacheContext ctx) throws AttributeDefineException {
    Method targetMethod = ctx.getTargetMethod();
    CacheEnable cacheEnable = targetMethod.getAnnotation(CacheEnable.class);
    ExpireExpr cacheExpire = targetMethod.getAnnotation(ExpireExpr.class);
    // check for duplicate setting
    if (cacheEnable.expire() != CacheAttribute.DO_NOT_EXPIRE && cacheExpire != null) {
        throw new AttributeDefineException("expire are defined both in @CacheEnable and @ExpireExpr");
    }
    // expire time defined in @CacheEnable or @ExpireExpr
    return cacheEnable.expire() != CacheAttribute.DO_NOT_EXPIRE ? cacheEnable.expire() : parseExpireExpr(cacheExpire, ctx.getArgument());
}

c'est la méthode pour tester,

 Method targetMethod = ctx.getTargetMethod();
CacheEnable cacheEnable = targetMethod.getAnnotation(CacheEnable.class);

Je dois me moquer de trois CacheContext, Method et CacheEnable. Y a-t-il une idée pour rendre le cas de test beaucoup plus simple?

11voto

yuranos87 Points 1371

Juste au cas où vous utiliseriez Kotlin. MockK ne dit rien au sujet d' être enchaînant une mauvaise pratique et vous permet facilement de faire cela .

 val car = mockk<Car>()

every { car.door(DoorType.FRONT_LEFT).windowState() } returns WindowState.UP

car.door(DoorType.FRONT_LEFT) // returns chained mock for Door
car.door(DoorType.FRONT_LEFT).windowState() // returns WindowState.UP

verify { car.door(DoorType.FRONT_LEFT).windowState() }

confirmVerified(car)

3voto

Doug R Points 4034

Ma suggestion pour simplifier votre cas de test est de refactoriser votre méthode.

Chaque fois que j'ai du mal à tester une méthode, c'est une odeur de code pour moi, et je demande pourquoi c'est difficile à tester. Et si le code est difficile à tester, il est probablement difficile à utiliser et à maintenir.

Dans ce cas, c'est parce que vous avez une chaîne de méthodes qui s'étend sur plusieurs niveaux. Peut-être passer ctx, cacheEnable et cacheExpire en tant que paramètres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X