¿A qué te refieres con refactorizar? Refactorizar suele aludir a reordenar el código, pero esto suele hacerse con algún fin. ¿Qué fin es el que persigues? Por ejemplo podríamos refactorizar empleando if ... en lugar de switch, pero se supone que si hacemos esto es buscando algo ¿qué buscas? Otra forma de refactorizar sería definir cuadrado, circulo y triangulo_recto como subclases de forma. Esto sería bastante lógico y adecuado a la programación orientada a objetos, ya que usaríamos herencia. Esta sería una refactorización que yo probablemente haría, pero no entiendo bien qué es lo que buscas.
Y respecto a las pruebas, a la hora de probar tienes que definir qué quieres probar. Por ejemplo, podríamos querer probar distintas cosas:
a) Que se pueden crear objetos de tipo Forma
b) Que se pueden crear objetos de tipo Forma cuyo atributo tipoForma sea 1
c) Que se pueden crear objetos de tipo Forma cuyo atributo tipoForma sea 2
d) Que se pueden crear objetos de tipo Forma cuyo atributo tipoForma sea 3
e) Que el cálculo de área para un objeto de tipo Forma cuyo atributo tipoForma es CUADRADO devuelve un valor correcto
f) Que el cálculo de área para un objeto de tipo Forma cuyo atributo tipoForma es CIRCULO devuelve un valor correcto
g) Que el cálculo de área para un objeto de tipo Forma cuyo atributo tipoForma es TRIANGULO_RECTO devuelve un valor correcto
Si vas a refactorizar lo lógico es primero refactorizar y luego plantear las pruebas.
Para plantear las pruebas, lo primero que tienes que saber es qué quieres probar.