我正在尝试为方法实现简单的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任何帮助:)
答案 0 :(得分:3)
你无法测试。 您可以测试一个类似于:“如果传递null参数,则检查是否抛出了IllegalArgumentException”。用于测试参数是否为空的单元测试没有意义,它不是单元测试的目的:https://en.wikipedia.org/wiki/Unit_testing
这里,“测试方法参数是否为空”应该在方法中完成。
答案 1 :(得分:3)
您绝对应该从NullPointerTester查看Guava。你可以在你的测试中使用它:
new NullPointerTester().testAllPublicInstanceMethods(YourClass.class)
为您的方法添加注释
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
我希望这会有所帮助
此致