Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TDD,矩阵加法不起作用_Java_Matrix_Tdd - Fatal编程技术网

Java TDD,矩阵加法不起作用

Java TDD,矩阵加法不起作用,java,matrix,tdd,Java,Matrix,Tdd,真相:开始学习Java课程。这个讲座是关于收藏的,在概念上并没有什么太难的。所有的理论,而不是血液和内脏 实验室,是一系列与讲座完全无关的编码项目(或者大部分是无论如何) 这个实验室是关于测试驱动开发的。具体案文如下: 为执行矩阵的方法编写测试和实现 整数矩阵上的加法,如下所述。请注意,“x”和“y”必须 具有相同的尺寸;生成的矩阵也将具有相同的属性 尺寸 public int[][] add(int[][] x, int[][] y); 寻找 关于阵列的文档 挑战-在编写实现代码之前编写测试

真相:开始学习Java课程。这个讲座是关于收藏的,在概念上并没有什么太难的。所有的理论,而不是血液和内脏

实验室,是一系列与讲座完全无关的编码项目(或者大部分是无论如何)

这个实验室是关于测试驱动开发的。具体案文如下:

为执行矩阵的方法编写测试和实现 整数矩阵上的加法,如下所述。请注意,“x”和“y”必须 具有相同的尺寸;生成的矩阵也将具有相同的属性 尺寸

public int[][] add(int[][] x, int[][] y);
寻找 关于阵列的文档

挑战-在编写实现代码之前编写测试。确保 你对矩阵加法的性质有很好的理解 在您尝试编写代码来执行它之前

有关矩阵加法的详细信息,请参见 以及引用的参考文献。注意矩阵加法的两个特性: 交换性和结合性——测试应该验证这些属性

我的测试代码第一次尝试

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;
    }

}
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;
    }

}
包测试;
导入静态org.junit.Assert.assertTrue;
导入代码。家庭作业4实践;
导入org.junit.Before;
导入org.junit.Test;
公共类引用测试
{
私人代码。家庭作业4实践课程;
@以前
公共作废设置()
{
_class=新代码.Homework4Practice();
}
@试验
公共无效addMatrice01()
{
int[]a={{1,2},{1,0};
int[]b={{1,0},{1,2};
int[][]应为{{2,2},{2,2};
int[][]实际值=_class.addMatrix(a,b);
assertTrue(“调用带有参数\“+a+”\”和\“+b+”\”的AddMatrix时,我预期结果为{2,2}{2,2},但结果为“+arrayEquals(预期,实际));
}
专用布尔数组相等(预期为int[]],实际为int[]]{
如果(预期的.length!=实际的.length){
返回false;
}

对于(inti=0;i,您的第一个问题是Java在默认情况下不会漂亮地打印数组,因此您需要编写一个
arrayPrint
方法

然后,您可以将
assertTrue
更改为以下内容:

`assertTrue("Expected {{2,2},{2,2}}, got " + arrayPrint(actual), arrayEquals(expected, actual));
如果断言失败,那是因为
addMatrix
arrayEquals
没有达到预期效果。断言消息应该会告诉您,然后您可以进行调试

至于如何着手做TDD,理论上你应该对待你的(不成文的)作为一个黑匣子:东西进去了,东西出来了,你不在乎转换是如何发生的。然后你可以为某些输入编写一些测试,测试你期望从盒子里出来的东西。在你的矩阵加法示例中,以下是一个完全合理的TDD测试用例:

Assert addMatrices({{1,2},{1,0}}, {{1,0},{1,2}}) == {{2,2},{2,2}}
换句话说,您的测试用例是完全可以接受的TDD,只要您在编写它时不知道
addMatrix
是如何工作的。理论上,您可以使用这套测试来指导您的开发;如果您的测试失败,您应该能够从这些失败测试的输出中了解原因


我在实践中遇到的一个大问题是,如果你不知道函数应该做什么(例如,如果你不知道矩阵加法做什么),为该函数编写测试可能会很困难。如果这种情况发生在您身上,我没有任何好的建议,只能完全按照您所做的去做。

我很困惑;您是在问在不知道代码的情况下如何编写测试吗?我想您只是希望在assertTrue()调用中使用逗号。而不是
assertTrue(“blah”+arrayEquals(blah))
但是相反,
assertTrue(“废话”,arrayEquals(废话))
@Jason Baker:我想是在一个坚果壳里,或者至少是一些有用的轻推。@CarlManaster解决了assertTrue行上的错误,谢谢,但我的测试仍然失败。那么打印出了什么错误呢?