джунит для многопоточного класса с мокито - PullRequest
0 голосов
/ 19 декабря 2018

Пожалуйста, помогите мне написать тест JUnit для этого кода, используя Mockito.

class A{
    private BlockingQueue<Runnable> jobQueue;

    public void methodA(List<String> messages) {
        try {
            jobQueue.put(() -> methodB(message));
        } catch(InterruptedException e) {}
    }

    private void methodB(Message message) {
        //other logic
    }
}

1 Ответ

0 голосов
/ 19 декабря 2018

В вашем примере не хватает контекста относительно того, что делает methodB ... Не зная, какую функциональность вы хотите проверить, просто проверка того, что methodB вызывается, не будет особенно полезным тестом и не будет насмехаться над BlockingQueue.,Я собираюсь выйти на конечность и предположить, что methodB взаимодействует с другим объектом, и именно это взаимодействие вы действительно хотите проверить, в этом случае мой код и тест будут выглядеть примерно так:

class A {
    private BlockingQueue<Runnable> jobQueue;
    private B b;

    public void methodA(Message message) {
        try {
            jobQueue.put(() -> methodB(message));
        } catch (InterruptedException e) {
        }
    }

    private void methodB(Message message) {
        b.sendMethod(message);
    }
}

class B {
    public void sendMethod(Message message) {
        // other logic
    }
}

И мой тест потенциально может выглядеть примерно так:

class Atest {

    private A testSubject;

    @Mock
    private B b;

    @Test
    public void testASendsMessage() {
        Message message = new Message("HELLO WORLD");
        testSubject.methodA(message);
        verify(b, timeout(100)).sendMethod(message);
    }

    @Before
    public void setup() throws Exception {
        testSubject = new A();
    }
}

В общем, вы хотите избежать необходимости проверять биты с несколькими потоками в модульном тесте, сохранять тесты с несколькими работающими потоками в основном для интеграционных тестов, но гденеобходимо взглянуть на Mockito.timeout (), как это использовать, см. пример выше.Надеюсь, это поможет?

...