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" ?
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.)