Java JUnit, интерфейсы, заголовки классов - PullRequest
1 голос
/ 14 мая 2011

Программист должен написать программу для программы XYZ.Он признал, что значения Div и Add основаны на одной и той же структуре данных Op.В результате он написал следующий тестовый код 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) {
}

это правильно?

Ответы [ 2 ]

1 голос
/ 14 мая 2011

Мой вариант:

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 голосов
/ 15 мая 2011

Мой ответ не полный. Я сосредоточился только на технических требованиях - мои рассуждения основаны только на тестовом коде, который вы вставили. Дополнительные выводы могут (и, вероятно, должны) быть сделаны на основе семантики классов / объектов, описанных там. Давайте отложим это на некоторое время.

Ваше решение не совсем корректно (я полагаю, вы имели в виду 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 или, возможно, несколько меньших числовых типов. Я не уверен, что long или Long подойдут здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...