Sto esitando tra algoritmo e implementazione poiché la maggior parte delle domande qui su come prevenire l'accoppiamento tra implementazione e test riguardano l'uso di spie / stub o mock.
Il problema tipico è che i test stanno semplicemente facendo il mirroring del SUT perché i test stanno concentrando la convalida del comportamento invece dello stato .
L'accoppiamento di cui sto parlando è dove i test stanno convalidando lo stato del SUT, ma devono rispecchiare il codice per raccogliere i dati necessari per formare l'asserzione.
Prendi ad esempio questo codice che verifica che il canvas abbia le dimensioni corrette:
it(
'should set the width and height of the canvas',
fakeAsync(
() => {
fixture.detectChanges();
getTestScheduler().flush();
tick();
let bordersWrapperStyle = getComputedStyle(fixture.nativeElement);
let bordersWidth = bordersWrapperStyle
.getPropertyValue('border-width')
.split(' ');
let yBordersTotalWidth = parseInt(bordersWidth[0]) * 2;
let xBordersTotalWidth = parseInt(bordersWidth[1]) * 2;
expect(page.canvasEl.width).toEqual(
fixture.nativeElement.offsetWidth - xBordersTotalWidth
);
expect(page.canvasEl.height).toEqual(
fixture.nativeElement.offsetHeight - yBordersTotalWidth
);
}
)
);
Ora SUT:
setCanvasRect() {
let rootEl = this.elRef.nativeElement;
let bordersWrapperStyle = getComputedStyle(rootEl);
let bordersWidth = bordersWrapperStyle.getPropertyValue('border-width').split(' ');
let yBordersTotalWidth = parseInt(bordersWidth[0]) * 2;
let xBordersTotalWidth = parseInt(bordersWidth[1]) * 2;
this.canvasEl.width = rootEl.offsetWidth - xBordersTotalWidth;
this.canvasEl.height = rootEl.offsetHeight - yBordersTotalWidth;
}
Forse la risposta è A volte è inevitabile avere questo tipo di accoppiamento tra test e SUT .