0

我想定义一个抽象方法,以便在我的抽象类中使用这个方法。然后,我想在扩展我的抽象类的不同类中定义这个抽象方法。

但我怎么能这样做呢?

(目标是为集成测试提供一些基本方法,它们都使用相同的“结构”,但实现一些不同的逻辑)。

如何在抽象类中定义一个带参数的抽象方法,在抽象类中已经使用这个抽象方法,但在我的测试实现中首先实现该方法?

public abstract class BaseIT {
    protected doVerify(String params..) {
        if (isValid()) {
            //basic verification for all extending testcases
        }
    }

    protected abstract boolean isValid(Object o);
}


public class TestA_IT extends BaseIT{
    @Test
    public void myTest {
        //do some specific stuff and verify with resulting params

        doVerify(params..);
    }

    protected boolean isValid(Object o) {
        return o.isValid();
    }   
}

请记住,这只是我的问题的一个(愚蠢的)例子。当然,我可以将 isValid 的结果交给基类方法,但在我的具体情况下可能不会这样。

问题是:Object o不同的测试用例实现是不同的对象。

我可能不会为此使用接口。我怎样才能做到这一点?

4

5 回答 5

0

MakeisValid方法接收一个 BaseIT 对象并使您的TestA_ITextend BaseIT

于 2012-06-20T10:25:45.427 回答
0

你可以这样做:

public class TestA_IT extends BaseIT {
    @Test
    public void myTest {
        //do some specific stuff and verify with resulting params

        doVerify(params..);
    }

    protected boolean isValid(Object o) {
        return (o instanceOf YourObject) ? ((YourObject)o).isValid() : false;
    }   
}

一个更酷的方法是实现访问者模式,但我认为你会这样。

于 2012-06-20T10:26:03.303 回答
0

您可以定义一个 Template method ,然后子类的实现将定义行为。

于 2012-06-20T10:26:41.790 回答
0

你可以投它:

((Class)o).isValid()

但我认为更好的方法是制作一个带有方法的接口isValid()。并使所有这些对象实现它。

于 2012-06-20T10:28:23.567 回答
0

您的示例令人困惑,因为您显示的两个类没有继承关系。在您澄清这一点之前,您是否考虑过使您的isValid()方法具有通用性和/或采用作为isValid()方法接口的类型的对象?

无论如何,请远离涉及强制转换或instanceof.

于 2012-06-20T13:00:18.657 回答