如何在同一对象中测试方法时模拟对象中的方法

时间:2012-12-03 13:26:46

标签: java unit-testing easymock

我有这样的java代码:

public class A {
    public int get() {
        // many codes
        String s = new String();
        //...
        int n = 5;
        return isEmpty(s) ? n : -1;
    }
    public boolean isEmpty(String s) {
        return s.isEmpty();
    }
}

现在我想测试get(),我不想同时测试isEmpty(),所以我想模拟isEmpty(),只测试一个方法,如果它调用该类的另一个方法, easymock可以嘲笑这个方法吗?

1 个答案:

答案 0 :(得分:3)

一种可行的方法是模拟A并执行类似

的操作
public class TestableA extends A
{
    @Override
    public boolean isEmpty( String s )
    {
         // "mock" impl goes here, eg.:
         return s;
    }
}

并以TestableA代替您编写单元测试。您甚至可以使用@Before方法创建此内容:

public class UnitTest
{
    private A a; // note: A, not TestableA!

    @Before
    public void setUp()
    {
        this.a = new A() 
        {
            @Override
            public boolean isEmpty( String s )
            ...
        }
    }

    @Test
    ...
}