Consider a scenario where a function A
depends on three functions — P
, Q
and R
. P, Q, R
themselves have been unit tested as they do some really complex computations. Now I need to test the function A
and I have two options —
Access P, Q, R
directly from A
function A (params) {
... P()
... Q()
... R()
}
PROs: No mocking required except for params.
CONs: Unnecessarily testing the logic of P, Q & R
.
Inject P, Q, R
as arguments into A
function A (P, Q, R, params) {
... P()
... Q()
... R()
}
PROs: A
is tested in a more controlled environment, as P, Q, R
as passed as args.
CONs: A lot of effort goes in keeping the mocked functions update to date with their original functions.
I want to know which approach is better of the two and how can I control their respective cons in a better fashion.
NOTE: A, P, Q, R
are all pure.