代码之家  ›  专栏  ›  技术社区  ›  TM. Randy Simon

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

  •  2
  • TM. Randy Simon  · 技术社区  · 16 年前

    假设你有第三方 图书馆 要扩展的类,只需向其添加方便方法(例如,可以使用默认参数调用继承的方法)。

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

    例如,如下所示:

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

    我怎么能断言 method 正在被呼叫?

    4 回复  |  直到 11 年前
        1
  •  4
  •   blong    11 年前

    您可以在单元测试中生成一个子类,它实际上告诉您:

    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;
            } 
         }
    }
    
        2
  •  2
  •   Nick Veys    16 年前

    单元测试对于验证给定方法的功能更有用,而不是断言覆盖率。更关心被称为什么方法的单元测试比它们应该测试的类更了解它们,更不用说,这会让读者感到困惑。

    覆盖工具,如 Cobertura EMMA 将告诉您是否正确地覆盖了代码。

        3
  •  1
  •   Rogério    15 年前

    在这种情况下,最好只编写集成测试,但是如果您真的想要一个单元测试,您可以像在任何其他情况下一样轻松地进行它:

    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。

        4
  •  0
  •   Steve Freeman    15 年前

    如果没有一个更具体的例子,很难说清楚,但是我想这应该是一个集成测试——一起测试整个包——而不是一个单元测试。有时一个在单元测试中可能过于细粒度。