package banking; import dev.banking.model.BankAccount; import org.junit.jupiter.api.Test; import java.util.concurrent.*; import static org.junit.jupiter.api.Assertions.assertEquals; public class BankAccountConcurrentDepositTest { @Test void concurrentDeposits() throws Exception { BankAccount account = new BankAccount(1, 0); int threads = 100; int perThread = 1000; ExecutorService executor = Executors.newFixedThreadPool(threads); CountDownLatch latch = new CountDownLatch(threads); for (int i = 0; i < threads; i++) { executor.submit(() -> { for (int j = 0; j < perThread; j++) { account.deposit(1); } latch.countDown(); }); } latch.await(); executor.shutdown(); assertEquals(threads * perThread, account.getBalance()); } }