Похоже, вы не используете базу данных для хранения состояния, поэтому сложно добавить полный ответ, не зная, как вы сохраняете это состояние. Независимо от того, что StatementProcessorService
должен каким-то образом сохранять состояние, я попытаюсь проиллюстрировать, как вы можете сбросить это состояние между тестами, и, возможно, вы сможете адаптировать его к своей ситуации.
Начиная с базового c " он хранится в памяти "пример
class StatementProcessorService {
// assuming you're storing state in memory for now
// here we're just creating a shared map, which is where we presume you're putting data
private Map<String, String> state = new HashMap<>();
}
Самый простой способ сделать это - предоставить метод сброса состояния извне StatementProcessorService
.
class StatementProcessorService {
// ...
/** Reset state */
@VisibleForTesting
public void reset() { state.clear(); }
}
Вы также можете использовать внедренный держатель состояния, который во время тестов может сам предоставлять метод сброса
class StateHolder {
// accessor/mutator methods
}
class TestStateHolder extends StateHolder {
// ...
public void reset() { ... }
}
class StatementProcessorService {
@Autowired
private StateHolder state;
}
И, наконец, вы можете просто имитировать StateHolder
с помощью Mockito
@SpringBootTest
class StatementProcessorServiceTest {
@MockBean StateHolder state;
}
Как обычно в Spring, существует множество способов достижения вашей цели.