我们说我有三个A,B,C类。 这三个人做同样的事情,但是以不同的方式,他们的效率不同。 所有方法名称,三个类中的变量名都是相同的。
class A{
public static int method(){
......
return result;
}
}
class B{
public static method(){
......
return result;
}
}
class C{
public static method(){
......
return result;
}
}
我有测试类,它有一个方法来测试上面三个类中的代码。由于此testMethod()
对于所有三个类都是通用的,有没有办法使用classes A,B,C
的对象调用此方法?
class Test{
public static int testMethod(Object ABC)
{
return ABC.method();
}
public static void main(String[] args){
A a = new A();
SOP(testMethod(a));
B b = new B();
SOP(testMethod(b));
C c = new C();
SOP(testMethod(c));
}
}
我能想到的唯一方法是为每个类创建三种不同的方法,比如这样。
class Test{
public static int testMethodA(A a)
{
return a.method();
}
public static int testMethodB(B b)
{
return b.method();
}
public static int testMethodC(C c)
{
return c.method();
}
public main()
{
//call to each of the three methods
............
}
这种情况的最佳方法是什么?基本上我想只有一个方法可以测试所有三个类。
答案 0 :(得分:3)
使用所有类的公共方法创建一个接口。然后,让每个类实现此接口。在测试代码中,使用接口作为参数类型,并将每个类的实例传递给方法。请注意,执行此操作时,要测试的方法不应该是静态的。
在代码中:
public interface MyInterface {
//automatically public
int method();
}
public class A implements MyInterface {
@Override //important
//not static
public int method() {
/* your implementation goes here*/
return ...;
}
}
public class B implements MyInterface {
@Override //important to check method override at compile time
public int method() {
/* your implementation goes here*/
return ...;
}
}
//define any other class...
然后测试:
public class Test {
//using plain naive console app
public static void main(String[] args) {
MyInterface myInterfaceA = new A();
testMethod(myInterfaceA);
MyInterface myInterfaceB = new B();
testMethod(myInterfaceB);
//and more...
}
public static void testMethod(MyInterface myInterface) {
myInterface.method();
}
}
或者如果您更喜欢使用JUnit:
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
public class MyInterfaceTest {
MyInterface myInterface;
@Test
public void methodUsingAImplementation() {
myInterface = new A();
//code more human-readable and easier to check where the code fails
assertThat(myInterface.method(), equalTo(<expectedValue>));
}
//similar test cases for other implementations
}