2

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

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

例如,像这样:

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

我如何断言method正在被调用?

4

4 回答 4

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;
        } 
     }
}
于 2009-05-12T16:53:25.867 回答
2

单元测试更有助于验证给定方法的功能,而不是断言覆盖率。更关心调用什么方法的单元测试比他们应该知道的更多地了解他们正在测试的类,更不用说会让读者感到困惑。

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

于 2009-05-12T17:09:43.983 回答
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。

于 2009-12-17T13:21:17.937 回答
0

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

于 2009-09-05T11:56:01.057 回答