Lowdown: Начало курса Java. Лекция посвящена коллекциям, и в концепции нет ничего сложного. Вся теория, а не кровь и кишки кодирования.TDD, Матричные дополнения не работают
Лаборатория, была серия кодирующих проектов, совершенно не связанных с лекцией (или, в основном, в любом случае).
Эта лаборатория посвящена разработке, основанному на тестировании. Точный текст такой:
Записывать тесты и реализацию метода, который выполняет матрицу сложения по целочисленным матрицам, как описано ниже. Обратите внимание, что «x» и «y» должны быть равны ; результирующая матрица также будет иметь те же размеры .
public int[][] add(int[][] x, int[][] y);
См http://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html для документации о массивах.
Задача - написать тесты ПЕРЕД записью кода реализации. Удостоверьтесь, что у вас есть хорошее представление о том, какие свойства сложения матрицы , прежде чем пытаться написать код для его выполнения.
Для получения дополнительной информации о добавлении матрицы см. http://mathworld.wolfram.com/MatrixAddition.html и ссылки, цитируемые там. Обратите внимание на два свойства сложения матрицы: Коммутативность и ассоциативность --- вы должны проверить эти свойства.
Код My Test Первая попытка
package tests;
import static org.junit.Assert.assertTrue;
import code.Homework4Practice;
import org.junit.Before;
import org.junit.Test;
public class ReferenceTests
{
private code.Homework4Practice _class;
@Before
public void setUp()
{
_class = new code.Homework4Practice();
}
@Test
public void addMatrice01()
{
int [][] a = {{1,2}, {1,0}};
int [][] b = {{1,0}, {1,2}};
int [][] expected = {{2,2}, {2,2}};
int [][] actual = _class.addMatrices(a, b);
assertTrue("Calling addMatrices with arguments \""+a+"\" and \""+b+"\" I expected the result to be {2,2} {2,2} but instead the result was " +arrayEquals(expected,actual));
}
private boolean arrayEquals(int[][] expected, int[][] actual) {
if (expected.length != actual.length) {
return false;
}
for (int i=0; i<expected.length; i++) {
if (expected[i] != actual[i]) {
return false;
}
}
return true;
}
}
Очевидно, я имею вопрос с assertTrue линии.
Теперь я знаю, что у меня были проблемы, потому что я должен был написать код (и посмотреть его) для добавления матрицы, я знал, как это сделать из других классов, но я не мог правильно его правильно кодировать , Так это то, что код выглядит, как я пытаюсь разработать тесты для:
Моего кода для тестирования
package code;
public class Homework4Practice
{
public int[][] addMatrices (int[][] a, int[][]b)
{
int[][] answer = new int[a.length][a[0].length];
for (int row = 0; row < a.length; row++)
{
for (int col = 0; col < a.length; col++)
{
answer[row][col] = a[row][col] + b[row][col];
}
}
return answer;
}
}
И с этим я не имею ни малейшего представления о том, как на самом деле идти об этом. Похоже, что в TDD есть много ресурсов, но я не совсем уверен, как их применять здесь. Время хрустнет на меня, и я просто не могу помочь нигде.
Я полностью понимаю и ценю важность TDD, но это явно ускользает от меня в реализации.
Спасибо за помощь.
Я смущен; вы спрашиваете, как писать тесты, не зная, что делает код? –
Я думаю, вы просто хотите запятую в вашем вызове assertTrue(). Не 'assertTrue (" blah "+ arrayEquals (blah))', а вместо этого 'assertTrue (" blah ", arrayEquals (blah))' –
@Jason Baker: В ореховой оболочке, я думаю, так или по крайней мере некоторые полезные подталкивания. – Adam