Junit使用Mock Objects

时间:2013-11-26 08:03:24

标签: junit4 easymock

MyClass{

public void myfunction(){
AnotherClass c=new AnotherClass();
c.somethod();//This method sets some values of the AnotherClass object c;

}
}

我有上面的场景要测试。如何检查 AnotherClass 对象 c 的值是否设置正确。我明白我必须使用Mock对象对于这些。但是无法弄清楚是怎么回事,因为在这里我不能将AnotherClass的模拟对象传递给myfunction,因为上面的设计。可以有人帮助我吗?

1 个答案:

答案 0 :(得分:1)

如果你真的想这样做,应该重新设计如下(如Dan也建议的那样)

import org.junit.Test;
import org.mockito.Mockito;

public class TestingMock {

    @Test
    public void test() {
        MyClass target = Mockito.spy(new MyClass());
        AnotherClass anotherClassValue = Mockito.spy(new AnotherClass());
        Mockito.when(target.createInstance()).thenReturn(anotherClassValue);
        target.myfunction();
        Mockito.verify(anotherClassValue).somethod();
    }

    public static class MyClass {

        public void myfunction(){
            AnotherClass c = createInstance();
            c.somethod();//This method sets some values of the AnotherClass object c;
        }

        protected AnotherClass createInstance() {
            return new AnotherClass();
        }
    }

    public static class AnotherClass {

        public void somethod() {

        }

    }
}

您将看到注释掉c.somethod()会使测试失败。 我正在使用Mockito。