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

5

我有以下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能否模拟这个方法?


要模拟没有get的IsEmpty函数,你需要将该函数委托给另一个类,然后将其注入到A中。希望你的真实世界示例不会像这样琐碎... - Tony Hopkinson
1个回答

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
    ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接