2012-04-22 325 views
2

我开始使用Junit,并且我有一个非常基本的问题。Java-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")); 
    } 
} 

它给我的下一个问题:The method rateTrans(String, int, int, int, int, String) is undefined for the type testing

我做错了什么?

+2

不相关,但Java中的类名通常以大写字母开头(请参见http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367)。对于JUnit,测试类名称以测试类的名称开头并且以“Test”结尾(因此'RateManagerTest'是对'RateManager'的测试) – NamshubWriter 2012-04-22 16:00:46

回答

3

一个空体和/或null作为返回值(当然,在这种情况下false可能是一个不错的选择)只是实现它:

protected boolean rateTrans(String, int, int, int, int, String) { 
    // TODO: implement me! 
    return false; 
} 

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

+0

使用可变参数来完成此操作可能会导致如可变参数不是方法签名的最后一个变量的限制。 – 2012-04-22 11:25:36

+0

因为我不知道Adam要求的签名,所以我只是选择使用可变参数来表示这个样本。无论如何,这是亚当的一个很好的暗示。 – spidey 2012-04-22 11:27:21

+0

据说方法签名是已知的。此外,返回诸如“假”之类的任意值通常是一个坏主意。 – 2012-04-22 11:30:09

5

我首选做一个临时的实施,无论是在TDD环境中或当你的IDE从界面生成类别,是抛出一个异常,如UnsupportedOperationException方式:

boolean rateTrans(String firstStr, int firstInt, int secondInt, int thirdInt, int fourthInt, String secondStr) { 
    // TODO: implement me! 
    throw new UnsupportedOperationException("Not yet implemented"); 
} 

之所以抛一个例外而不是返回一个潜在的有效值,如null,false,0,"",Collections.empyList()或类似的,这是非常清楚的事实上没有工作的实现。否则,可能会忘记临时解决方案,并且人们开始使用它,假设它已正确实施。

编辑:添加参数列表。

+1

当你进行临时实现时,是的,那么'UnsupportedOperationException'是最好的选择。但!当你第一次写测试时,几乎没有实际的区别。你的测试会失败。当所有测试都通过临时实现成功时,那么你的测试显然是错误的,或者你错过了很多测试。几乎没有什么实际的区别是,如果你喜欢看到测试失败(没有未捕获的异常)或破坏(带有未捕获的异常)。 – spidey 2012-04-22 11:34:03

+0

TDD意味着测试在实现被填充之前编写。在写入测试用例之前,方法签名应该已经被确定。在实现类中使用时间可变varargs方法签名方法是错误的。 – 2012-04-22 11:42:38

+0

@spidey为了满足单元测试的要求而在这样的正确情况下为任意值抛弃UnsupportedOperatiomException也是不正确的。 – 2012-04-22 11:45:41

1

从您未提供实施的方法中抛出UnsupportedOperationException。这比返回任意值更好。即false或true