Захваты не являются ответом. Проблема в том, что ваш код создает новый объект в registerNewRecord (или так я полагаю). Невозможно получить созданный вами объект с помощью new
до завершения кода, который вы тестируете. Захваты позволяют задавать вопросы об объекте, созданном / полученном во время выполнения ПОСЛЕ завершения тестируемого метода.
Другая проблема с вашим тестом состоит в том, что ваш тест для текущего метода зависит от кода в методе registerNewRecord()
и, возможно, от любого кода в конструкторе объекта Record. Один из способов разорвать эту зависимость и проверить промежуточное состояние объекта Record - это заглушить метод registerNewRecord()
и заставить его вернуть макет. Затем вы можете проверить, что были сделаны правильные вызовы для объекта Record, и что ваш код ведет себя корректно для всех возможных возвращаемых значений из объекта записи.
MyClassStub extends MyClass {
Record registerNewRecord() {
return recordMock;
}
}
MyClass objectToTest = new MyClassStub();
public void testSomeMethod() {
// set expectations, call replay
objectToTest.someMethod(); // (contains above code that calls registerRecord)
// asserts/verify
}
Как положительный побочный эффект, вы обнаружите, что ваш тест прерывается только тогда, когда с кодом в тестируемом методе что-то не так, и никогда не прерывается, если проблема заключается в конструкторе Record или registerNewRecord. Однако вы захотите написать второй тест для метода registerNewRecord()
, чтобы убедиться, что он работает правильно.