0

我正在尝试为一种方法实现一个简单的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);
}

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

4

3 回答 3

3

你不能这样测试。您可以测试如下行为:“检查如果传递了空参数,则抛出 IllegalArgumentException”。用于测试参数是否为空的单元测试没有意义,这不是单元测试的目的:https ://en.wikipedia.org/wiki/Unit_testing

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

于 2013-05-17T11:42:11.763 回答
3

您绝对应该从Guava中查看NullPointerTester。您在测试中使用它,如下所示:

new NullPointerTester().testAllPublicInstanceMethods(YourClass.class)

然后你需要用JSR-305 s @NonNull注释你的方法

getEntry(@NonNull String user, @NonNull String grp, int status);

然后在您的生产代码中使用前提条件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。当他们收到这个时,他们就会知道他们做错了什么。

于 2013-06-04T16:00:14.153 回答
0

为了检查您的方法是否没有空参数,您需要使用 Mockito 并模拟声明此方法(我们称其为 m(param))的类(我们称之为 C.java)。当然 C 类不应该是您要测试的类(模拟是“虚拟”实现)。

如果您正在调用类 C 的方法 m 并且您想验证 m(param) 的参数“param”不为空,请执行以下操作:

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

我希望这有帮助

问候

于 2013-05-17T13:10:10.053 回答