Annotation Type IfProfileValue
@Target({TYPE,METHOD}) @Retention(RUNTIME) @Documented @Inherited public @interface IfProfileValue
Test annotation for use with JUnit 4 to indicate whether a test is enabled or disabled for a specific testing profile.In the context of this annotation, the term profile refers to a Java system property by default; however, the semantics can be changed by implementing a custom
ProfileValueSource
. If the configuredProfileValueSource
returns a matchingvalue()
for the declaredname()
, the test will be enabled. Otherwise, the test will be disabled and effectively ignored.@IfProfileValue
can be applied at the class level, the method level, or both. Class-level usage of@IfProfileValue
takes precedence over method-level usage for any methods within that class or its subclasses. Specifically, a test is enabled if it is enabled both at the class level and at the method level; the absence of@IfProfileValue
means the test is implicitly enabled. This is analogous to the semantics of JUnit's@Ignore
annotation, except that the presence of@Ignore
always disables a test.Example
When usingSystemProfileValueSource
as theProfileValueSource
implementation (which is configured by default), you can configure a test method to run only on Java VMs from Oracle as follows:@IfProfileValue(name = "java.vendor", value = "Oracle Corporation") public void testSomething() { // ... }
'OR' Semantics
You can alternatively configure
@IfProfileValue
with OR semantics for multiplevalues()
. The following test will be enabled if aProfileValueSource
has been appropriately configured for the"test-groups"
profile with a value of eitherunit-tests
orintegration-tests
. This functionality is similar to TestNG's support for test groups and JUnit's experimental support for test categories.@IfProfileValue(name = "test-groups", values = { "unit-tests", "integration-tests" }) public void testWhichRunsForUnitOrIntegrationTestGroups() { // ... }
@IfProfileValue
vs.@Profile
Although the
@IfProfileValue
and@Profile
annotations both involve profiles, they are not directly related.@Profile
involves bean definition profiles configured in theEnvironment
; whereas,@IfProfileValue
is used to enable or disable tests.Meta-annotation Support
This annotation may be used as a meta-annotation to create custom composed annotations.
- Since:
- 2.0
- Author:
- Rod Johnson, Sam Brannen
- See Also:
ProfileValueSource
,SystemProfileValueSource
,ProfileValueSourceConfiguration
,ProfileValueUtils
,AbstractJUnit4SpringContextTests
,SpringJUnit4ClassRunner
,ProfileValueChecker
,Profile
,ActiveProfiles