On Monday 03 May 2004 14:36, Kim Schulz wrote:
> In article <Vbqlc.39$_y2.9@news.get2net.dk>, Jonas Kongslund wrote:
>> Det var en del. Er der tale om legacy-kode? Hvis ja, så skal det vel
>> alligevel ændres (hvis ikke så har jeg svært ved at se den økonomiske
>> genvinst i at unitteste koden)?
>
> tjaa uni projekter er sære
Er der tale om et kursus omhandlende test eller hur?
>> Man kommer i øvrigt langt med små, lokale ændringer.
> ja men det er så rigtigt mange små ændringer som skal til, og der
> skal ikke meget til før det kommer til at blive noget være hack.
Jeg taler om restruktureringer (refactorings), som har til formål at
forbedre designet så koden er lettere at teste. Et eksempel kunne f.eks.
være at transformere en klasse B indeholdt i en klasse A til en top-level
klasse, konvertere den til et interface, og derefter give en instans af
klasse B som argument til A's konstruktør. Begge klasser bliver lettere at
teste efter denne transformation.
Eksempel:
Følgende kode
public class A {
private B b;
public A() { ...; b = new B(); ...; }
public void foo() { ...; b.bar(); ...; }
private class B {
private void bar() {...}
}
}
transformeres til
public interface B {
void bar();
}
public class BImpl implements B {
public void bar() {...}
}
public class A {
private B b;
public A(B b) { this.b = b; ...; }
public void foo() { ...; b.bar(); ...; }
}
Man skal selvfølgelig også sørge for at rette i de klasser, der anvender A's
konstruktør. Hvis der er mange af disse så kan man vælge at bibeholde den
oprindelige konstruktør
public class A {
...
public A(B b) { super(new BImpl()); }
public A(B b) { this.b = b; ...; }
...
}
--
Jonas Kongslund