【问题标题】:how to mock a method in an object when testing a method in the same object在同一对象中测试方法时如何模拟对象中的方法
【发布时间】:2012-12-03 13:26:45
【问题描述】:

我有这样的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。希望您在现实世界中的示例比这更简单......

标签: java unit-testing easymock


【解决方案1】:

一个可行的方法是模拟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
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-24
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    相关资源
    最近更新 更多