Аннотирование класса, чтобы каждый его метод мог ожидать X мс после выполнения
Я пишу некоторые модульные тесты JUnit для проверки моего объекта доступа к данным DynamoDB. Вот один из тестов.
....
private static DynamoDBMapper ddbMapper;
@BeforeClass
public static void setup() {
ddbMapper = DynamoDBClients.getTestingDynamoDBMapper();
}
@Before
public void setupTestItem() {
Item item = new Item();
item.setItemID(TEST_COUTSE_ITEM_ID);
// Create an item with every fields populated
ddbMapper.save(item);
}
@Test
public void test_update_simple_attribute() {
Item item = ddbMapper.load(Item.class, TEST_ITEM_ID, TEST_ITEM_VARIANT);
item.setLanguageTag(TEST_LANGUAGE_TAG + "CHANGED");
ddbMapper.save(item);
Item updatedItem = ddbMapper.load(Item.class, TEST_ITEM_ID, TEST_ITEM_VARIANT);
assertEquals(updatedItem.getLanguageTag(), TEST_LANGUAGE_TAG + "CHANGED"); // This field has been changed
}
У меня есть еще тесты, которые обновят элемент и подтвердят, было ли обновление передано в DynamoDB, и я мог бы прочитать его обратно.
Однако я заметил, что если я запускаю эти тесты чаще, я иногда сталкиваюсь с проблемой, что DynamoDB еще не полностью записывает обновленные данные, и когда я загружаю их, они все еще показывают старые данные. Повторный запуск тестов обычно решает проблему.
Я считаю, что DynamoDB использует модель возможной согласованности для записи, поэтому имеет смысл, что обновление может занять немного больше времени, чем скорость выполнения Java. Один из способов смягчить это - сделать так, чтобы тест JUnit приостанавливался на 100 мс или около того.
Но я должен был бы включить некоторый код для приостановки выполнения везде, где я делаю ddbMapper.save() или ddbMapper.delete(), который кажется нереальным для всех моих тестов и тестов, которые я напишу.
Кажется, что я мог бы заняться этим с помощью подхода, основанного на аннотациях. Возможно, реализация аннотации на уровне класса @SuspendAtEndOfMethod и все ее методы могут быть затронуты, мне интересно, возможно ли это?