2011-05-14 53 views
1

甲程序员写一个程序的xyz程序。他已经认识到Div和Add值都基于相同的底层Op数据结构。因此,他编写了以下JUnit测试代码。爪哇JUnit中,接口,类标题

@Test 
public void testDiv() { 
Op aValue = new Div(8, 40, “String”); 
assertEquals(5, aValue.getVal1()); 
assertEquals(“String 40/8 = 5”, aValue.toString()); 
} 

基于此代码:为Op编写一个接口并为Div编写类头。

- 我的回答是:

public interface IDiv { 
String aValue(); 
String toString(); 
} 

public class Div (int, String) { 
} 

这是正确的?

+0

您似乎没有定义“Op”接口。我只能看到'IDiv'界面。你确定这是你想要的吗? – 2011-05-14 21:20:19

回答

1

我的变化是:

public interface Op { 
    String getVal1(); 
} 

public class Div implements Op { 

    public Div(int a, int b, String c) { 
     ... 
    } 

    public getVal1() { 
     ... 
    } 
} 

我不加toString()方法Op接口,因为Java中的每个对象隐含延伸已经有这种方法Object类。

+0

Thank you dude :) – Paradox 2011-05-14 19:07:40

+0

@paradox btw,我刚刚更新了我的答案:如果'Div'实现了'Op',那么它应该为来自'Op'的所有方法提供实现(例如'getVal1()')。 – 2011-05-14 19:14:26

0

我的回答是不完整的一个。我只关注技术要求 - 我的推理仅基于您粘贴的测试代码。基于这里描述的类/对象的语义,可能(也可能应该)淹没更多的结论。让我们搁置一会儿吧。

您的解决方案似乎并不完全正确的(我假设你的意思Op为您发布的接口名称)。有了这个定义,测试不会简单地编译。我们知道,是通过什么实现的Op(这里分配给aValue变量)有(至少)两种方法:

  • getVal1()
  • toString()

后者是微不足道的,因为Java中的每一个对象都实现了这个方法(java.lang.Object所有类的超类保证)

所以Op接口应该是这样的:

/*public*/ interface Op { 
    /*some return type*/ getVal1(); 
    // .. other methods (?) 
} 

Op的可视性修饰符是低重要的问题在这里。

getVal1()方法的返回类型并不明显。你将不得不检查它,但可能为了这条线编译assertEquals(5, aValue.getVal1());它需要是Integer,int或可能是一些较小的数字类型。我不知道longLong会适合在这里。