Java - 如何测试抽象类的非抽象方法?

phy*_*boy 0 java testing junit abstract-class

我有一个没有抽象方法的abstract类......如何测试这个?我可以简单地将它导入测试类并照常开展业务吗?

例:

public abstract class SomeAbstractClass implements SomeOtherClass {

    // Some variables defined here
    private static final String dbUrl = System.getProperty("db.url");

    // Some public methods
    public String doSomethingToUrl(String url) {
        url = url + "/takeMeSomewhereNice";
    }

}
Run Code Online (Sandbox Code Playgroud)

说我在ARG通为db.urllocalhost:8080,我想测试的doSomethingToUrl方法做输出新的字符串...它仍然会是这种格式?

public class TestUrl {

    SomeAbstractClass sac = new SomeAbstractClass();

    @Test
    public void testUrlChange() throws Exception {

        String testUrl = "localhost:8080";

        assertThat("localhost:8080/takeMeSomewhereNice", 
            sac.doSomethingToUrl(testUrl));
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

您将无法创建just SomeAbstractClass,no 的实例- 但您可以创建一个匿名子类:

private SomeAbstractClass sac = new SomeAbstractClass() {};
Run Code Online (Sandbox Code Playgroud)

你可能想创建一个具体子类只是用于测试的缘故,虽然-让你随时补充抽象方法,你只需要把它们放在那里.

虽然我怀疑你可以使用一个模拟框架,但我怀疑它会增加更多复杂性以获得一点好处,除非你需要检查抽象方法被调用的情况.(模拟非常适合交互测试,但对于其他目的而言可能很脆弱.)它也可以轻松地产生更混乱的错误消息(由于涉及基础设施).