Mockito 和 Java Spring - 测试中的存储库

2024-01-09

我是mockito / Java Spring的新手,我尝试进行测试。我有一个管理控制器,其中包含以下方法:

@RequestMapping(value="/admin/users", method = RequestMethod.GET)
public ResponseEntity<List<User>>users(){
    List<User> students=this.userService.getAll();
    if(students.isEmpty())
        return new ResponseEntity<List<User>>(HttpStatus.NO_CONTENT);
    return  new ResponseEntity<List<User>>(students,HttpStatus.OK);
}

现在,我尝试进行测试,看看它是否有效,如下所示:

public class AdminControllerTest {

    @InjectMocks
    private AdminController controller;

    @InjectMocks
    private UserServiceImpl userService = new UserServiceImpl();

    @Mock
    private UserRepository userRepository;

    private MockMvc mockMvc;

    @Before
    public void setup(){

        MockitoAnnotations.initMocks(this);

        mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
    }

    @Test
    public void test() throws Exception {

        User user = new User();
        user.setId(5);
        user.setActive(true);
        user.setLastName("Test1");
        user.setName("Test1");
        user.setPassword("123123");
        user.setRole(User.Role.student);
        user.setEmail("[email protected] /cdn-cgi/l/email-protection");
        when(userService.save(user)).thenReturn(user);
        userService.save(user);
        mockMvc.perform(get("/admin/users")).andDo(print());

    }

}

问题是我不确定如何使 Test 类将项目添加到存储库中。我尝试了这种方法,但出现 NullPointerExceptions。我猜测这是因为存储库是空的,并且当调用 .getAll() 方法时它会返回错误。


由于您已经模拟了存储库,因此不需要将内容保存到其中。您需要做的就是指定调用某些方法时存储库将返回的内容。

代替:

when(userService.save(user)).thenReturn(user);

...尝试使用:

when(userRepository.findAll()).thenReturn(Collections.singletonList(user));

为什么它不起作用

您收到 NullPointerException 的原因之一是:

  1. 你正在设置一个when在一个甚至不是模拟的对象上,和/或
  2. 你没有提供when为了userRepository.findAll()方法,所以当你调用它时它返回 null:

    List<User> students=this.userService.getAll(); <-- returned null
    

    ...然后被取消引用并抛出 NPE:

    if(students.isEmpty()) <-- throws NPE when students is null
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mockito 和 Java Spring - 测试中的存储库 的相关文章

随机推荐

  • 将新数据推送到 firebase 数据库时设置自定义键

    好吧 我是 Firebase 的新手 我希望在将新数据推送到数据库时拥有自己的密钥 Problem FireBase push setValue mapped values 这给出了如下结构 我如何在那里创建自己的自定义密钥 比如用户名什么
  • 从 WinForms 迁移到 WPF

    那么我们正在考虑从 WinForms 迁移到 WPF WPF 有哪些陷阱 我们得到了组件one的flexgrid 是否有任何wpf网格具有相同的功能 它的一件好事是您可以为单元格实现自己的绘制方法 它可以合并单元格打印并保存为多种文件格式
  • 在 ServiceStack Web 服务中设置公共属性

    我正在尝试使用 Sqlite 为 ServiceStack 服务编写单元测试 由于 Sqlite 不支持存储过程 因此我创建了 ServiceCommand 类型的公共属性 它将命令文本和命令类型作为输入 默认情况下 它配置为运行存储过程
  • 无法解析方法“findViewById(int)”

    我遇到了麻烦findViewByid但我找不到问题出在哪里 这是我的FirstFragment班级代码 import android app Fragment import android os Bundle import android
  • 为什么使用 unix-compress 和 go compress/lzw 会产生不同的文件,而其他解码器无法读取?

    我在终端中压缩了一个文件compress file txt并得到 如预期 file txt Z 当我将该文件传递给ioutil ReadFile in Go buf0 err ioutil ReadFile file txt Z 我收到错误
  • Qt 应用程序框架中的分段错误

    由于 QColor colorMap 9 这会产生分段错误 如果我删除 colorMap 分割错误就会消失 如果我把它放回去 它回来了 如果我清理所有然后构建所有 它就会消失 如果我增加它的数组大小它就会回来 另一方面 如果我减少它 它就不
  • 在代理键上使用反向索引的好习惯? (甲骨文)

    假设我有一个带有自动递增代理键的表 这是使用反向索引的好例子吗 我的说法是否正确 插入 插入索引 会更快 因为新值将随机插入 而不是总是插入最右边的叶子 不断强制重新平衡 索引查找会稍微慢一些 因为数据库必须花费 一点 时间来反转索引 因为
  • 来自服务器的 HTML 响应

    我有一个应用程序将一些数据提交到本地服务器 结果服务器将发回 JSON 说 状态 成功 当我在 2 3 SDK 模拟器中运行该应用程序 但安装在 Galaxy Tab 2 2 SDK 中时 它可以正常工作 相同的响应采用 html 的形式
  • Spark中的FPGrowth算法

    我正在尝试在 Spark 中运行 FPGrowth 算法的示例 但是遇到错误 这是我的代码 import org apache spark rdd RDD import org apache spark mllib fpm FPGrowth
  • corePoolSize 0 的 ThreadPoolExecutor 在任务队列已满之前不应执行任务

    我正在经历Java 并发实践并被困在8 3 1 线程的创建和销毁话题 以下脚注警告不要保留corePoolSize为零 开发人员有时会试图将核心大小设置为零 以便工作线程 最终会被拆除 因此不会阻止 JVM 退出 但这可能会导致一些问题 不
  • WPF:如何使视图动态化?

    我有以下 xaml 以下 xaml 必须在运行时动态填充需要什么 但是如何填充 MainWorkspaceViewModel 有一个名为 View 的属性 该属性是对象类型 因此我可以设置其中的每个视图
  • 调试包含在 C++/CLI DLL 中的静态库时,调试器不会单步执行本机代码

    在 C 应用程序中 我引用了本机 C 静态库 我将其包装在 C CLI DLL 中 我选择静态库而不是 DLL 因为我还有与向用户发布应用程序的过程相关的其他限制 在该论坛上提供的许多主题中 我发现了以下实现 Main MyCLRDLL t
  • 如何了解 Windows 10 周年更新或更高版本在 WPF 应用程序中使用的是浅色主题还是深色主题?

    我编写了一个 WPF 桌面应用程序 想使用桌面桥将其放入 Windows 应用商店 该应用程序能够以浅色和深色模式呈现 并使用强调色 但是 为了成为 Windows 10 的好公民 如果可能的话 我希望从操作系统获取该信息 据我目前的理解
  • 如何从复选框中获取未选中的值?

    我有一个复选框列表 当我选中该复选框时 它应该将值插入数据库 当我取消选中该复选框时 应该从数据库中删除数据 如果我在复选框中分配一个值 那么我只能获取选中的复选框值 如果我使用隐藏字段 那么我可以获得复选框的所有值 但我不知道哪个 1 被
  • 求 pandas 中连续两行的平均值

    我试图找到每列中连续两行的平均值 In 207 df DataFrame A 9 4 2 1 4 B 12 7 5 4 8 In 208 df Out 207 A B 0 9 12 1 4 7 2 2 5 3 1 4 4 4 8 结果应该是
  • 关于对库/框架进行单元测试的最佳实践是什么?

    Context 我正在努力为我正在设计的库 框架编写一组单元测试 对于上下文 请将我的库视为一组相关对象的分层对象层 Question 基本上 我试图遵守有关单元测试的原则和最佳实践 如一些帖子 https stackoverflow co
  • 如何改变 svg 的颜色?

    使用figma创建了一个svg并尝试更改css中的颜色 填充 黑色不起作用 SVG代码
  • 如何为 SpriteKit 游戏选择 tvOS 菜单中的按钮

    我正在为 tvOS 扩展我的 iOS 游戏 大多数游戏控制都是由touchesBegan touchesMoved and touchesEnded 我所有的选择按钮都按以下方式处理 if button1 contains location
  • 我可以用作 webpack 配置的 es 模块吗?

    我使用的是节点 13 4 0 带有 es 模块 通过 mjs 扩展名 使用 webpack 配置文件作为 es 模块会崩溃 Error ERR REQUIRE ESM Must use import to load ES Module pa
  • Mockito 和 Java Spring - 测试中的存储库

    我是mockito Java Spring的新手 我尝试进行测试 我有一个管理控制器 其中包含以下方法 RequestMapping value admin users method RequestMethod GET public Res