jUnit - 如何断言调用继承的方法?

时间:2009-05-12 16:47:27

标签: java inheritance junit jmock

假设您要扩展一些第三方类,只需向其添加便捷方法(例如,您可以使用默认参数调用继承方法)。

使用jUnit / jMock,是否可以编写一个断言/模拟期望来测试是否调用了正确的继承方法?

例如,像这样:

class SomeClass extends SomeLibraryClass {
    public String method(String code) {
         return method(code, null, Locale.default());
    }
}

如何断言method被调用?

4 个答案:

答案 0 :(得分:4)

您可以在单元测试中创建一个实际告诉您的另一个子类:

public class MyTest {
    boolean methodCalled = false;

    @Test
    public void testMySubclass(){
          TestSomeClass testSomeClass = new TestSomeClass();
          // Invoke method on testSomeclass ...
          assertTrue( methodCalled);

    }  
    class TestSomeClass extends SomeClass{
        public String method(String code){
              methodCalled = true;
        } 
     }
}

答案 1 :(得分:2)

单元测试对于验证给定方法的功能更有用,而不是断言覆盖率。更多地关注所调用的方法的单元测试更多地了解他们正在测试的类而不是他们可能应该考虑的类,更不用说会让读者感到困惑。

CoberturaEMMA等覆盖率工具会告诉您是否正确覆盖了代码。

答案 2 :(得分:1)

在这种情况下只编写集成测试可能确实更好,但如果你真的想要进行单元测试,你可以像在任何其他情况下一样轻松地使用它:

public class SomeClassTest
{
    @Test
    public void testMethod()
    {
        final String code = "test";

        new Expectations()
        {
            SomeLibraryClass mock;

            {
                mock.method(code, null, (Locale) any);
            }
        };

        new SomeClass().method(code);
    }
}

此测试使用JMockit模拟API。

答案 3 :(得分:0)

如果没有一个更具体的例子,很难说,但我猜这应该是一个集成测试 - 测试整个包 - 而不是单元测试。有时,单元测试可能会过于精细化。