Search code examples
javajmockit

Same value returned by 2 object with same Mocked Interfaces using JMockit


I made a simple Test Class to simplify my actual problem :

public class BidonTest {

@Mocked
IBidon ibidon;

@Mocked
IBidon ibidon2;

@Mocked
Bidon bidon;

@Mocked
Bidon bidon2;

@Test
public void testBidon(){
    new NonStrictExpectations(2, Bidon.class){
        {
            ibidon.doIt(); result = "i: coco";
            ibidon2.doIt(); result = "i: ismael et jordan";
            bidon.doIt(); result = "c: coco";
            bidon2.doIt(); result = "c: ismael et jordan";
        }
    };
    System.out.println(ibidon.doIt());
    System.out.println(ibidon2.doIt());
    System.out.println(bidon.doIt());
    System.out.println(bidon2.doIt());
}


public interface IBidon{
    public String doIt();
}

public class Bidon implements IBidon{
    @Override
    public String doIt(){
        return "toto";
    }
}

}

Below, the test result :

i: coco
i: coco
c: coco
c: ismael et jordan

My first question is : why ibidon2 returns "coco" ? (even if i have few ideas, but maybe someone here is a JMockit expert :D ) My second question is : how can i change it to make it return "ismael et jordan" ?


Solution

  • It works fine for me, after fixing your source.

    package main;
    
    import mockit.Mocked;
    import mockit.NonStrictExpectations;
    import org.junit.Test;
    
    public class TestBidon {
        @Mocked IBidon ibidon;
        @Mocked IBidon ibidon2;
        @Mocked Bidon bidon;
        @Mocked Bidon bidon2;
    
        @Test public void testBidon() {
            new NonStrictExpectations() {{
                ibidon.doIt();  result = "i: coco";
                ibidon2.doIt(); result = "i: ismael et jordan";
                bidon.doIt();   result = "c: coco";
                bidon2.doIt();  result = "c: ismael et jordan";
            }};
    
            System.out.println(ibidon.doIt());
            System.out.println(ibidon2.doIt());
            System.out.println(bidon.doIt());
            System.out.println(bidon2.doIt());
        }
    }
    

    Produces:

    i: coco
    i: ismael et jordan
    c: coco
    c: ismael et jordan
    

    What version are you using? The above was via 0.999.12.

    (Also not sure why you're using an invocation count here since it depends on being a NonStrictInvocation to avoid the assert.)