PowerMock de expectNew() n'est pas en se moquant d'un constructeur comme prévu

Je suis en train d'apprendre les tenants et les aboutissants des diverses moqueries des bibliothèques et des PowerMock(en particulier le EasyMock extension) est le prochain sur la liste. Je suis d'essayer de se moquer d'un constructeur et les exemples fournis n'ont pas la même réaction lorsque j'essaie de les reproduire. Aussi loin que je peux dire, il ne se moque de l'constructeur et simplement un produit comme si c'était normal.

C'est la classe de test:

@RunWith(PowerMockRunner.class)
@PrepareForTest({Writer.class})
public class FaultInjectionSituationTest {

    @Test
    public void testActionFail() throws Exception {
        FaultInjectionSituation fis = new FaultInjectionSituation();
        PowerMock.expectNew(Writer.class, "test")
           .andThrow(new IOException("thrown from mock"));
        PowerMock.replay(Writer.class);
        System.out.println(fis.action());
        PowerMock.verify(Writer.class);
    }

}

J'ai essayé de remplacer le "test" avec un EasyMock.isA(String.class), mais il a donné les mêmes résultats.

C'est le FaultInjectionSituation:

public class FaultInjectionSituation {

    public String action(){
        Writer w;
        try {
            w = new Writer("test");
        } catch (IOException e) {
            System.out.println("thrown: " + e.getMessage());
            return e.getLocalizedMessage();
        }
        return "returned without throw";
    }
}

La "Écrivain" n'est rien de plus qu'une coquille d'une classe:

public class Writer {
    public Writer(String s) throws IOException {
    }

    public Writer() throws IOException{
    }
}

Lorsque le test est exécuté, il affiche "retourné sans jeter", indiquant que l'exception n'a jamais été levée.

OriginalL'auteur AdamSpurgin | 2012-09-10