@Target(value={TYPE,METHOD}) @Retention(value=RUNTIME) @Documented @Inherited public @interface IfProfileValue
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 configured
ProfileValueSource
returns a matching value()
for the
declared name()
, 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.
SystemProfileValueSource
as the ProfileValueSource
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() { // ... }
You can alternatively configure @IfProfileValue
with OR
semantics for multiple values()
. The following test will be enabled
if a ProfileValueSource
has been appropriately configured for the
"test-groups"
profile with a value of either unit-tests
or integration-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 the
Environment
; whereas,
@IfProfileValue
is used to enable or disable tests.
As of Spring Framework 4.0, this annotation may be used as a meta-annotation to create custom composed annotations.
ProfileValueSource
,
SystemProfileValueSource
,
ProfileValueSourceConfiguration
,
ProfileValueUtils
,
AbstractJUnit4SpringContextTests
,
SpringJUnit4ClassRunner
,
ProfileValueChecker
,
Profile
,
ActiveProfiles
public abstract String name
name
of the profile value against which to test.