java - 我怎样才能模拟一个非空值?

标签 java unit-testing mocking mockito

假设我正在测试以下方法。

/**
 * Does something. This method throws a {@code NullPointerException}
 * either given string or specified charset is {@code null}.
 * @param s the string
 * @param c the charset
 */
void doSomething(String s, Charset c) {
}

我如何在测试时为非空目的进行模拟?

assertThrows(NullPointerException.class,
             new MyObject().doSomething(null, UTF_8));
assertThrows(NullPointerException.class,
             new MyObject().doSomething("", null));

是否有模拟一般非空值的库/方法?

我尝试了 Mockito.mock,它似乎会为某些无效类型抛出异常,因为它实际上可以模拟。

更新

根据 user2004685 的回答,现在,我很好奇我是否可以像这样使用 anyStringany(Class)

assertThrows(NullPointerException.class,
             new MyObject().doSomething(null, any(Charset.class)));
assertThrows(NullPointerException.class,
             new MyObject().doSomething(anyString(), null));

最佳答案

这是一个void 方法。如果您使用 Mockito 模拟它以抛出异常,那么您需要执行如下操作:

 Mockito.doThrow(new NullPointerException("Description"))
     .when(mymock)
     .doSomething(Mockito.anyString(), Mockito.any(Charset.class));

即使将 null 传递给该方法,它也应该可以工作。

关于java - 我怎样才能模拟一个非空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35104203/

相关文章:

java - 未找到 web.xml。模拟struts测试用例

typescript - 在 Jest 和 typescript 中模拟交叉点观察者

java - jTable beans绑定(bind)

c# - 如何让 T4MVC 重新生成 .generated.cs 文件?

java - 如何找到字符串的下一个标记

javascript - 获取 Angular 4 中随机数的单元测试

unit-testing - 如何在Dart中对Stream.listen()进行单元测试

database - Mock 框架可以为我做这个吗?

java - 在java中,从字符串中删除重复字符的最有效方法是什么?

java - 在JAVA中从GMT时间长获取区域设置日期时间字符串