2

JMockit を理解しようとしていますが、まだ壁にぶつかっています。

これは私がテストしたいクラスです:

@Stateless
public class VerfahrensArchivService {

@PersistenceContext
private EntityManager em;


public void storeAndUpdateVerfahren(List<Verfahren> pVerfahrenToStore) {

    if (pVerfahrenToStore == null){
        throw new IllegalArgumentException("pVerfahrenToStore darf nicht null sein!");
    }

    for (Verfahren verfahren : pVerfahrenToStore) {

        Verfahren storedCopy = getVerfahrenByExterneID(verfahren.getFremdsystem(), verfahren.getExterneId());

        if (storedCopy == null){
            //Ein neues Verfahren wurde gefunden!

            em.persist(verfahren);
        }else{

        }

    }

}
}

これは私のテストがどのように見えるかです:

public class VerfahrensArchivServiceTest {

@Tested
private VerfahrensArchivService archiveService;

@NonStrict //Also tried simple @Mocked
private EntityManager em;


@Test
public void should_store_new_verfahren_to_persistence_layer(){


    List<Verfahren> listeMitEinemNeuenVerfahren = new ArrayList<Verfahren>();
    Verfahren v = new Verfahren();
    v.setId(0);
    v.setExterneId("Neu");
    v.setFremdsystem(Verfahren.FREMDSYSTEM_P);
    listeMitEinemNeuenVerfahren.add(v);


    new NonStrictExpectations(archiveService) { 
        {
            //simulate that nothing was found in the db  
            archiveService.getVerfahrenByExterneID(anyString, anyString);result = null;
        }
    };

    new Expectations() {
        {
            em.persist(any);
        }
    };

    archiveService.storeAndUpdateVerfahren(listeMitEinemNeuenVerfahren);

}



}

em.persist() を呼び出す瞬間に EntityManager が null であるため、テストは失敗します。なんで?テストは正しい方法で構成されていますか? そうでない場合は、どうすればうまくいくか教えていただけますか?

JMockit が TDD の方法で生産性を高めるのに役立つと本当に信じています。しかし、それを正しく使用する方法を理解する必要があります。

4

1 に答える 1