使用JMockit具有相同Mocked接口的2对象返回的值相同

时间:2012-01-09 11:01:31

标签: java jmockit

我制作了一个简单的测试类来简化我的实际问题:

公共类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";
    }
}

}

下面是测试结果:

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

我的第一个问题是:为什么ibidon2会返回“coco”? (即使我的想法很少,但也许有人在这里是JMockit专家:D) 我的第二个问题是:如何改变它以使其返回“ismael et jordan”?

1 个答案:

答案 0 :(得分:0)

修复你的来源后,它对我来说很好。

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());
    }
}

产地:

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

您使用的是哪个版本?以上是通过0.999.12。

(也不确定为什么你在这里使用调用计数,因为它依赖于NonStrictInvocation来避免断言。)

相关问题