JUnit不是null测试

时间:2013-05-17 11:34:05

标签: java junit

我正在尝试为方法实现简单的junit测试。我的目的是测试方法参数是否不是null。如果参数为null,则测试失败。

方法是:

/*
 * @return the db entry object
*/
getEntry( String user, String grp, int status);

我第一次尝试实施测试

public void testGetEntry() {
    String userId = null;
    getEntry( userId, "grp1", 3);
    asserNotNull(userId);
}

我认为这不是正确的方法。 thx任何帮助:)

3 个答案:

答案 0 :(得分:3)

你无法测试。 您可以测试一个类似于:“如果传递null参数,则检查是否抛出了IllegalArgumentException”。用于测试参数是否为空的单元测试没有意义,它不是单元测试的目的:https://en.wikipedia.org/wiki/Unit_testing

这里,“测试方法参数是否为空”应该在方法中完成。

答案 1 :(得分:3)

您绝对应该从NullPointerTester查看Guava。你可以在你的测试中使用它:

new NullPointerTester().testAllPublicInstanceMethods(YourClass.class)

然后,您需要使用JSR-305 s @NonNull

为您的方法添加注释
getEntry(@NonNull String user, @NonNull String grp, int status);

然后在生产代码中使用Preconditions checkNotNull。

getEntry(@NonNull String user, @NonNull String grp, int status)
{
     Preconditions.checkNotNull(user, "user must be specified");
     Preconditions.checkNotNull(grp, "grp must be specified");
     //return entry;
}

这将使其他类在滥用您的类时收到NullPointerException。当他们收到这个时,他们会知道他们做错了什么。

答案 2 :(得分:0)

为了检查你的方法没有null参数,你需要使用Mockito并模拟该类(让我们称之为C.java),其中声明了这个方法(让我们称之为m(param))。当然,C类不应该是你想要测试的类(mock是一个“虚拟”实现)。

如果你正在调用类C的方法m并且你想验证m(param)的参数“param”不是null,那么这是如何做的:

C cMock= Mockito.mock(C.class);
verify(cMock).m(isNotNull());

以下是一些有用的文档:

http://mockito.googlecode.com/svn/branches/1.6/javadoc/org/mockito/Matchers.html

http://mockito.googlecode.com/svn/branches/1.5/javadoc/org/mockito/Mockito.html

我希望这会有所帮助

此致