2010-10-01 17 views
1

J'avais la version suivante d'un test dans JUnit 3, et j'ai essayé de le convertir en JUnit 4, sans succès. L'idée est d'avoir un cas de test de base, qui fait le test réel d'une interface, disons Service interface. Je veux tester la classe ServiceImpl, en utilisant le cas de test de base.Junit 3 à JUnit 4 conversion

 
public abstract class ServiceBaseTest extends TestCase { 

    protected Service service; 
    protected abstract Service getService(); 

    @Override 
    public void setUp() { 
     service = getService(); 
    } 

    public void testMethod(){ 
     //test code 
    } 
    ... 
} 

classe comme ServiceImplTest:

 
public class ServiceImplTest extends ServiceBaseTest { 
    @Override 
    public void setUp() { 
     service = new ServiceImpl(); 
    } 
} 

Je suis conscient que je peux supprimer l'extension TestCase et utiliser @BeforeClass pour la méthode setup. Mais la différence est que @BeforeClass nécessite la méthode setup pour être static. C'est difficile pour moi, puisque je ne peux pas faire getService() statique, car il serait en conflit avec abstract mot-clé. Est-ce une façon propre de mettre en œuvre l'alternative, en utilisant JUnit 4?

Répondre

1

Vous ne pouvez utiliser que l'annotation @Before?

+0

@Before va s'exécuter avant chaque @Test. Je veux juste configurer le service une fois. – walters

+1

dans JUnit3, setUp() est également appelé avant chaque test. Si vous voulez vous assurer que getService() n'est appelé qu'une seule fois, vous pouvez stocker le résultat de l'appel dans un champ statique – NamshubWriter

1
protected static Service service = null; 

@Override 
public void setUp() { 
    if(service == null)//Check null 
     service = new ServiceImpl(); 
}