Java Junit/未实现的测试代码

Java Junit/未实现的测试代码,java,junit,Java,Junit,我开始使用Junit,我有一个非常基本的问题 我想检查方法rateTrans。我还没有实现它,但是我想在实现之前编写测试。我知道这个方法会得到哪些参数 所以我写了下一节课: import org.junit.Assert.*; import junit.framework.*; public class testing extends TestCase { public void testAdd(){ assertTrue(rateTrans("1223",1,2,3,4,"

我开始使用Junit,我有一个非常基本的问题

我想检查方法
rateTrans
。我还没有实现它,但是我想在实现之前编写测试。我知道这个方法会得到哪些参数

所以我写了下一节课:

import org.junit.Assert.*;
import junit.framework.*;

public class testing extends TestCase {

    public void testAdd(){
    assertTrue(rateTrans("1223",1,2,3,4,"blabla"));
    assertTrue(rateTrans("1223",1,2,3,4,"")) ;
    assertFalse(rateTrans("1223",7,2,3,4,"blabla"));
    }
}
它给了我下一个问题:
类型测试的rateTrans(String,int,int,int,int,String)方法未定义


我做错了什么?

只需使用空正文和/或
null
作为返回值来实现它(在这种情况下
false
可能是一个不错的选择):


恭喜你,你正在做TDD!一旦实现了所有测试,就可以实现方法本身。在此之前,由于布尔返回值,一些测试可能是绿色的,而其他测试则是红色的。

在TDD环境中或IDE从接口生成类时,创建临时实现的首选方法是引发异常,例如:

引发异常而不是返回潜在的有效值,例如
null
false
0
”,
集合.empyList()
或类似值的原因是,很明显,实际上没有有效的实现。否则,临时解决方案很可能被遗忘,人们开始使用它,假设它已经正确地实现了


编辑:添加参数列表。

从未提供实现的方法中抛出一个
不支持操作异常。这比返回任意值要好得多。例如,false或true

使用varargs来实现这一点可能会导致一些限制,例如vararg不是方法签名的最后一个变量。因为我不知道Adam需要的签名,所以我选择在这个示例中使用varargs。无论如何,这对Adam来说是一个很好的提示。据说方法签名是已知的。此外,返回任意值(如“false”)通常是个坏主意。请参阅我对matsev关于返回值的回答的评论。很明显,我监督了声明的签名,对不起,是我的错。当您进行临时实现时,是的,那么
不支持操作异常
是最佳选择。但是当你首先编写测试时,几乎没有实际的区别。你的考试会失败。当所有测试都通过临时实现成功时,那么您的测试显然是错误的,或者您错过了很多测试。几乎没有实际区别的是,您是否希望看到测试失败(没有未捕获的异常)或中断(有未捕获的异常)。TDD意味着测试是在填充实现之前编写的。在编写测试用例之前,应该已经确定了方法签名。在实现类中使用时态varargs方法签名方法是错误的。@spidey在这样的正当情况下放弃对任意值的UnsupportedOperationException以满足单元测试也是错误的。@ChinBoon我同意,varargs可能不是您要找的。我已经更新了方法签名,但是如果你知道上下文,参数名称应该改成更具描述性的名称。@matsev干杯,很好地描述了使用任意返回值代替适当异常的影响。不相关,但Java中的类名通常以大写字母开头(请参阅)。对于JUnit,测试类名称通常以被测试类的名称开头,以单词
test
结尾(因此
RateManagerTest
是对
RateManager
的测试)
protected boolean rateTrans(String, int, int, int, int, String) {
    // TODO: implement me!
    return false;
}
boolean rateTrans(String firstStr, int firstInt, int secondInt, int thirdInt, int fourthInt, String secondStr) {
    // TODO: implement me!
    throw new UnsupportedOperationException("Not yet implemented");
}