Reputation: 13402
I have some code like below.
@RetryOnFailure(attempts = Constant.RETRY_ATTEMPTS, delay = Constant.RETRY_DELAY, unit = TimeUnit.SECONDS)
public void method() {
// some processing
//throw exception if HTTP operation is not successful. (use of retry)
}
The value of RETRY_ATTEMPTS and RETRY_DELAY variable come from a separate Constant class, which are int primitive. Both the variable are defined as public static final.
How can I override these values while writing the unit testcases. The actual values increases running time of unit testcases.
I have already tried two approach: Both did not work
- Using PowerMock with Whitebox.setInternalState().
- Using Reflection as well.
Edit:
As mentioned by @yegor256, that it is not possible, I would like to know, why it is not possible? When these annotations get loaded?
Upvotes: 1
Views: 261
Reputation: 105043
There is no way to change them in runtime. What you should do, in order to make your method()
testable is to create a separate "decorator" class:
interface Foo {
void method();
}
class FooWithRetry implements Foo {
private final Foo origin;
@Override
@RetryOnFailure(attempts = Constant.RETRY_ATTEMPTS)
public void method() {
this.origin.method();
}
}
Then, for test purposes, use another implementation of Foo
:
class FooWithUnlimitedRetry implements Foo {
private final Foo origin;
@Override
@RetryOnFailure(attempts = 10000)
public void method() {
this.origin.method();
}
}
That's the best you can do. Unfortunately.
Upvotes: 1