You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltaspike.apache.org by "Gerhard Petracek (JIRA)" <ji...@apache.org> on 2015/10/12 12:27:05 UTC
[jira] [Commented] (DELTASPIKE-1001) Skip caching ClassDeactivation
for some project stages
[ https://issues.apache.org/jira/browse/DELTASPIKE-1001?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14952903#comment-14952903 ]
Gerhard Petracek commented on DELTASPIKE-1001:
----------------------------------------------
i don't get why you need 3 new classes for a simple change like:
{code}
public static boolean isActivated(Class<? extends Deactivatable> targetClass)
{
ProjectStage currentProjectStage = ProjectStageProducer.getInstance().getProjectStage();
if (currentProjectStage == ProjectStage.UnitTest || currentProjectStage == ProjectStage.Development)
{
activationStatusCache.clear();
}
//code as it was before
}
{code}
+ your test just tests your new classes and not the overall behavior.
with the change mentioned above you can use the following test to test the overall behavior with:
{code}
public class ProjectStageDependentClassDeactivationTest
{
@Test
public void deactivationResultInProjectStageUnitTest()
{
ProjectStageProducer.setProjectStage(ProjectStage.UnitTest);
Class<? extends Deactivatable> classToCheck = DeactivatableForUnitTest.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true, ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(false, ClassDeactivationUtils.isActivated(classToCheck));
}
@Test
public void deactivationResultInProjectStageDevelopment()
{
ProjectStageProducer.setProjectStage(ProjectStage.Development);
Class<? extends Deactivatable> classToCheck = DeactivatableForDevelopment.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true, ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(false, ClassDeactivationUtils.isActivated(classToCheck));
}
@Test
public void deactivationResultInProjectStageProduction()
{
ProjectStageProducer.setProjectStage(ProjectStage.Production);
Class<? extends Deactivatable> classToCheck = DeactivatableForProduction.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true, ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true, ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
@Test
public void deactivationResultInProjectStageIntegrationTest()
{
ProjectStageProducer.setProjectStage(ProjectStage.IntegrationTest);
Class<? extends Deactivatable> classToCheck = DeactivatableForIntegrationTest.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true, ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true, ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
@Test
public void deactivationResultInProjectStageStaging()
{
ProjectStageProducer.setProjectStage(ProjectStage.Staging);
Class<? extends Deactivatable> classToCheck = DeactivatableForStaging.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true, ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true, ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
@Test
public void deactivationResultInProjectStageSystemTest()
{
ProjectStageProducer.setProjectStage(ProjectStage.SystemTest);
Class<? extends Deactivatable> classToCheck = DeactivatableForSystemTest.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true, ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true, ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
/*
the tests just need to be consistent within one stage and not across stages
-> separated classes are just needed, because using a single class will lead to
getting in cached results of other tests once it isn't project-stage unit-test or development
*/
private static class DeactivatableForUnitTest implements Deactivatable
{
}
private static class DeactivatableForDevelopment implements Deactivatable
{
}
private static class DeactivatableForProduction implements Deactivatable
{
}
private static class DeactivatableForIntegrationTest implements Deactivatable
{
}
private static class DeactivatableForStaging implements Deactivatable
{
}
private static class DeactivatableForSystemTest implements Deactivatable
{
}
}
public class EditableTestDeactivator implements ClassDeactivator
{
private static Map<Class<? extends Deactivatable>, Boolean> result = new HashMap<Class<? extends Deactivatable>, Boolean>();
@Override
public Boolean isActivated(Class<? extends Deactivatable> targetClass)
{
return result.get(targetClass);
}
public static void activate(Class<? extends Deactivatable> classToActivate)
{
result.put(classToActivate, true);
}
public static void deactivate(Class<? extends Deactivatable> classToActivate)
{
result.put(classToActivate, false);
}
}
//with
//props.put("org.apache.deltaspike.core.spi.activation.ClassDeactivator","org.apache.deltaspike.core.util.activation.EditableTestDeactivator");
//in TestConfigSource
{code}
> Skip caching ClassDeactivation for some project stages
> ------------------------------------------------------
>
> Key: DELTASPIKE-1001
> URL: https://issues.apache.org/jira/browse/DELTASPIKE-1001
> Project: DeltaSpike
> Issue Type: New Feature
> Components: Core
> Affects Versions: 1.5.0
> Reporter: John D. Ament
> Assignee: John D. Ament
> Fix For: 1.5.1
>
>
> Add the ability to skip caching if the project stage is unit test and possibly development.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)